webForumDet fria alternativet

String.indexOf verkar inte vilja ta svenska tecken

.NET

5 svar · 532 visningar · startad av speedy

Medlem sedan dec. 200283 inlägg
Frågan#1

Jag har lite problem med en sökfunktion jag jobbar på. Tanken är att man ska kunna söka igenom en massa objekt som innehåller attribut i form av strängar.

Jag loopar igenom mina objekt och använder String.IndexOf("min söksträng") för att se om objektets attribut innehåller söksträngen.

Problemet med detta är att String.IndexOf inte verkar vilja ta svenska tecken. Så fort jag använder ett svenskt tecken i söksträngen så resulterar det i att jag inte får några träffar. Trotts att jag vet att det finns objekt som passar.

Någon som har något tips på en lösning/vad som kan vara fel?

Medlem sedan juni 20034 013 inlägg
#2

Kolla i debuggern så de verkligen har samma innehåll, dvs att det är samma sorts strängar med samma teckenuppsättning, så inte bara den ena är unicode, exempelvis. När du tittar på variabler i debuggern borde du få upp deras äkta innehåll, byte för byte.

Medlem sedan dec. 200283 inlägg
#3

Jag har lyckats köra debuggingen så långt att jag fick fram värdena som låg i objekten. Det jag inte lyckas med är att se är om värdena är av unicode-typ eller inte.

Jag är lite färsk på debugging så jag kanske kan få en hint om hur man kan se det :D

Medlem sedan dec. 2000399 inlägg
#4

Kolla på "culture, comparing data" i hjälpen så ser du hur du ska lösa problemet. Det handlar om att sätta rätt kultur så att strängar jämförs på rätt sätt.

Medlem sedan dec. 200283 inlägg
#5

Jag har läst på lite mer i hjälpen nu och framförallt kollat på CultureInfo-klassen. Jag har testat att göra om min kod lite men utan att få det att fungera.

Exempel på min gamla metod

string Attribute = "Mitt attribut i objektet";
string SearchParam = "Min söksträng";

int result1 = Attribute.IndexOf(SearchParam)

Som det ser ut nu:

CultureInfo ci= new CultureInfo("sv-SE");

string Attribute = "Mitt attribut i objektet";
string SearchParam = "Min söksträng";

int result1 = ci.CompareInfo.IndexOf(ArtAttribute, SearchParam, CompareOptions.IgnoreCase);
Medlem sedan dec. 2000399 inlägg
#6

Prova det här istället. Det fungerar för mig iaf:

using System;
using System.Globalization;

public class Test {
	public static void Main(string[] args) {
		CultureInfo ci= new CultureInfo("sv-SE");

		string Attribute = "Hej din gamle häst";
		string SearchParam = "häst";

		int result = ci.CompareInfo.IndexOf(Attribute, SearchParam, CompareOptions.IgnoreCase);
		Console.WriteLine("Result: {0}", Attribute.Substring(result, SearchParam.Length));
	}
}

Men jag har inga problem att jämföra strängar som innehåller svenska tecken. Följande fungerar:

		string s1 = "hej gamle häst";
		string s2 = "häst";
		Console.WriteLine("Index: {0}", s1.IndexOf(s2));
254 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)