2009-06-15 1 views
13

Wie werden Unicode-Vergleiche codiert? Ich muss genau wie unten testen und auf bestimmte Buchstaben in einer Zeichenfolge prüfen. Der folgende Code Drosseln: Warnung: Vergleich zwischen Zeigern und integerObjective-C-Unicode-Zeichenvergleiche

for (charIndex = 0; charIndex < [myString length]; charIndex++) 
{ 
    unichar testChar = [myString characterAtIndex:charIndex]; 

    if (testChar == "A") 
     // do something 
    if (testChar == "B") 
     // do something 
    if (testChar == "C") 
     // do something 
} 

Antwort

18

Für char-Literale, einfache Anführungszeichen verwenden:

if (testChar == 'A') NSLog(@"It's an A"); 

Oder das Zeichen mit dem Code Punktnummer dar:

if (testChar == 0x1e01) NSLog(@"It's an A with a ring below"); 

Der Compiler sieht doppelte Anführungszeichen als eine Zeichenkette, also baut "A" als Äquivalent zu einer const char * auf (die Ihnen dort eine Fehlermeldung über den Zeiger gibt).

+0

Vielen Dank! Das macht genau das, was ich brauche. – Alan

+0

Das ist nicht wirklich richtig. Das Testen eines einzelnen "Unichar", um zu sehen, ob es ein "A" ist, kann zu Problemen führen - zum Beispiel wenn jemand 'Ä' schreibt, kann es als '0041 0308' kodiert sein, in welchem ​​Fall dein Code das 'A' erkennt das '0041', oder es könnte als' 00C4' codiert werden, in welchem ​​Fall Ihr Code es nicht erkennt. – alastair

0

Was möchten Sie wirklich tun? Direkte Zeichenvergleiche sind ungewöhnlich. In der Regel -compare: oder -isEqual: würden zwei Strings miteinander verglichen. Oder NSScanner würde verwendet, um die Komponenten einer Zeichenfolge zu analysieren.

+0

Guter Punkt. Ich würde nicht sagen, dass das Vergleichen von Zeichen ungewöhnlich ist, aber das Durchlaufen jedes Zeichens in einer Zeichenkette scheint ungewöhnlich. Mehr "großes Bild" Informationen würde sicherlich helfen. –