Entwickler-Ecke

C# - Die Sprache - String startsWith()-Problem


Wumpe - Mi 11.11.09 16:53
Titel: String startsWith()-Problem
Also, ich habe eine Map, wo als Keys Hex-Werte sind und als Values Unicode-Zeichen.

"0003", "あ"
(...)
"010F", "⤴"
(...)
"012B", "A"
"012C", "B"
"012D", "C"
usw.

Nun habe ich einen String, der u.a. Unicode-Zeichen enthält. Ich beschränke mich in diesem Falle aber mal auf den String "AAAAAA".
Diesen möchte ich nun durchlaufen, um sie in Zahlenwerte umzuwandeln.
Ich gehe dafür durch alle Werte meiner Map durch und hole mir jeweils ein Key- und Value-Paar.
Ich vergleiche den String nun mit der startsWith()-Methode.

if (myString.StartsWith(mapValue))
Console.WriteLine(myString + " --> " + mapKey + " | " + mapValue);


Ausgabe:
AAAAAA --> 010F | ⤴
AAAAAA --> 0110 | ⤵
AAAAAA --> 012B | A
AAAAAA --> 01DB | ⤴
AAAAAA --> 01DC | ⤵

Daraufhin habe ich folgendes probiert:
Console.WriteLine("A".StartsWith("⤴"));
Ausgabe: True

Also ich bin ja nicht der Meinung, dass "A" mit "⤴" beginnt. :cry: Was ist da los? Ist das ein Bug (oder ein Feature ;)) Was kann ich dagegen tun?


Kha - Mi 11.11.09 17:39

Keine Ahnung, was da schief läuft, aber im Zweifelsfall schieben wir es mal auf die deutsche Sprache :mrgreen: .

C#-Quelltext
1:
Console.WriteLine("A".StartsWith("⤴", StringComparison.Ordinal))                    


...ok, die Forensoftware mag das Zeichen ebenfalls nicht ;) .


Wumpe - Mi 11.11.09 18:06

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Keine Ahnung, was da schief läuft, aber im Zweifelsfall schieben wir es mal auf die deutsche Sprache :mrgreen: .

C#-Quelltext
1:
Console.WriteLine("A".StartsWith("⤴", StringComparison.Ordinal))                    


...ok, die Forensoftware mag das Zeichen ebenfalls nicht ;) .
Oh, danke für den Tipp.
Wusste gar nicht, dass man noch ein StringComparison angeben kann. Habe mir jetzt ne eigene StartsWith geschrieben (klappt auch):


C#-Quelltext
1:
2:
3:
4:
5:
        public static bool StartsWith(string s, string compareWith)
        {
            if (s.Length < compareWith.Length) return false;
            return (s.Substring(0, compareWith.Length).Equals(compareWith));
        }