4 Stimmen

Ersetzen von Buchstaben in einem String

Hallo, ich habe ein Problem, das ich nicht weiß, wie ich lösen soll. Das Problem ist, dass ich nicht einmal weiß, wie ich danach googeln soll. Ich habe bereits Stunden im Internet verbracht, um die Lösung zu finden, aber bin nicht erfolgreich gewesen. Die Situation sieht so aus:

Ich habe einen String, sagen wir:

NSString *string = @"aabccdeeefghiijzž";

mein Ergebnis soll so aussehen:

NSString *string = @"aabccdeeefghiujzz";

Also, wenn du verstanden hast, muss ich dies tun:

ersetze a durch a

ersetze c durch c

ersetze e durch e

ersetze e durch e

und so weiter..

Vielleicht kann mir jemand helfen? Ich habe zwar eine Antwort, aber sie ist nicht sehr optimiert, ich hoffe auf eine bequemere Lösung.

Vielen Dank im Voraus!

11voto

Dave DeLong Punkte 240835

Lassen Sie die Frameworks die Konvertierung für Sie durchführen:

NSString *blah = @"aabccdeeefghiijzž";
NSData *data = [blah dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *newblah = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"new: %@", newblah);

Dies protokolliert:

new: aabccdeeefghiijzz

5voto

Sergey Kalinichenko Punkte 694383

Dies wird funktionieren:

NSString *str = @"aabccdeeefghiijzž";
NSLog(@"%@", str);
NSMutableString *s = [[str decomposedStringWithCompatibilityMapping] mutableCopy];
NSUInteger pos = 0;
while(pos < s.length) {
    NSRange r = [s rangeOfComposedCharacterSequenceAtIndex:pos];
    if (r.location == NSNotFound) break;
    pos = ++r.location;
    if (r.length == 1) continue;
    r.length--;
    [s deleteCharactersInRange:r];
}
NSLog(@"%@", s);

Die Idee besteht darin, jedes Zeichen mit diakritischem Zeichen in eine Sequenz seines Basiscodes und eine Sequenz von Unicode kombinierenden diakritischen Zeichen zu dekomponieren (das wird durch decomposedStringWithCompatibilityMapping gemacht), dann durch den String zu gehen und alle solchen Zeichen nacheinander zu entfernen (das ist es, was die Schleife macht).

0voto

Cœur Punkte 34332

Dave DeLong Antwort wird "æ" durch "ae" und "ß" durch "s" ersetzen, aber Ligaturen œ nicht ersetzen.

Eine verbesserte Lösung besteht darin, drei Zeilen Mapping hinzuzufügen, um alles korrekt zu verarbeiten:

blah = [blah stringByReplacingOccurrencesOfString:@"Œ" withString:@"OE"];
blah = [blah stringByReplacingOccurrencesOfString:@"œ" withString:@"oe"];
blah = [blah precomposedStringWithCompatibilityMapping];

NSData *data = [blah dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *newblah = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

-1voto

Moonkid Punkte 881

Ich kann nur das anbieten:

[string stringByReplacingOccurrencesOfString:@"a" withString:@"a"];

und so weiter...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X