Was ist der beste Weg, um einen NSString in Objective-C zu tokenisieren / zu teilen?
objective-c
cocoa
tokenize
Ned Batchelder
quelle
quelle
[anArray componentsJoinedByString:@":"];
.componentsSeparatedByCharactersInSet
. Siehe Antwort unten.Jeder hat es erwähnt,
componentsSeparatedByString:
aber Sie können auchCFStringTokenizer
(denken Sie daran, dass einNSString
undCFString
austauschbar ist) verwenden, um auch natürliche Sprachen zu kennzeichnen (wie Chinesisch / Japanisch, die keine Wörter in Leerzeichen aufteilen).quelle
enumerateLinesUsingBlock:
undenumerateSubstringsInRange:options:usingBlock:
letztere ist eine blockbasierte Version von CFStringTokenizer. developer.apple.com/mac/library/documentation/Cocoa/Reference/… : developer.apple.com/mac/library/documentation/Cocoa/Reference/… :enumerate
Methoden sind auch in iOS 4 und höher verfügbar.Wenn Sie nur eine Zeichenfolge teilen möchten, verwenden Sie
-[NSString componentsSeparatedByString:]
. Verwenden Sie für eine komplexere Tokenisierung die NSScanner-Klasse.quelle
Wenn Ihre Tokenisierungsanforderungen komplexer sind, lesen Sie mein Open Source-Toolkit zum Tokenisieren / Parsen von Cocoa-Zeichenfolgen: ParseKit:
http://parsekit.com
Für das einfache Aufteilen von Zeichenfolgen mit einem Trennzeichen (wie ':') wäre ParseKit definitiv übertrieben. Aber auch für komplexe Tokenisierungsanforderungen ist ParseKit äußerst leistungsfähig / flexibel.
Siehe auch die Dokumentation zur ParseKit-Tokenisierung .
quelle
Wenn Sie mehrere Zeichen tokenisieren möchten, können Sie NSStrings verwenden
componentsSeparatedByCharactersInSet
. NSCharacterSet hat einige handliche vorgefertigte Sets wie daswhitespaceCharacterSet
und dasillegalCharacterSet
. Und es hat Initialisierer für Unicode-Bereiche.Sie können Zeichensätze auch kombinieren und zum Tokenisieren wie folgt verwenden:
componentsSeparatedByCharactersInSet
Beachten Sie, dass leere Zeichenfolgen erzeugt werden, wenn mehr als ein Mitglied des charSet hintereinander angetroffen wird. Daher möchten Sie möglicherweise auf Längen von weniger als 1 testen.quelle
Wenn Sie eine Zeichenfolge in Suchbegriffe unter Beibehaltung von "zitierten Phrasen" umwandeln möchten, finden Sie hier eine
NSString
Kategorie, die verschiedene Arten von Anführungszeichenpaaren berücksichtigt:""
''
‘’
“”
Verwendung:
Code:
quelle
Wenn Sie sprachliche Merkmale einer Zeichenfolge (Wörter, Absätze, Zeichen, Sätze und Zeilen) aufteilen möchten, verwenden Sie die Zeichenfolgenaufzählung:
Diese API funktioniert mit anderen Sprachen, in denen Leerzeichen nicht immer das Trennzeichen sind (z. B. Japanisch). Die Verwendung
NSStringEnumerationByComposedCharacterSequences
ist auch die richtige Methode zum Aufzählen von Zeichen, da viele nicht-westliche Zeichen mehr als ein Byte lang sind.quelle
Ich hatte einen Fall, in dem ich die Konsolenausgabe nach einer LDAP-Abfrage mit ldapsearch aufteilen musste. Richten Sie zuerst die NSTask ein und führen Sie sie aus (ich habe hier ein gutes Codebeispiel gefunden: Führen Sie einen Terminalbefehl aus einer Cocoa-App aus ). Aber dann musste ich die Ausgabe teilen und analysieren, um nur die Druckservernamen aus der Ldap-Abfrage-Ausgabe zu extrahieren. Leider ist es eine ziemlich langwierige String-Manipulation, die überhaupt kein Problem wäre, wenn wir C-Strings / Arrays mit einfachen C-Array-Operationen manipulieren würden. Also hier ist mein Code mit Kakaobjekten. Wenn Sie bessere Vorschläge haben, lassen Sie es mich wissen.
quelle
Ich bin selbst auf eine Instanz gestoßen, in der es nicht ausreichte, die Zeichenfolge nach Komponenten zu trennen. Viele Aufgaben wie
1) Kategorisieren von Token in Typen
2) Hinzufügen neuer Token
3) Trennen von Zeichenfolgen zwischen benutzerdefinierten Abschlüssen wie alle Wörter zwischen "{" und "} "
Für solche Anforderungen fand ich Parse Kit ein Lebensretter.
Ich habe es verwendet, um .PGN-Dateien (Prtable Gaming Notation) erfolgreich zu analysieren. Es ist sehr schnell und einfach.
quelle