Каков наилучший способ токенизировать / разбить строку NSString в Objective-C?
objective-c
cocoa
tokenize
Нед Бэтчелдер
источник
источник
[anArray componentsJoinedByString:@":"];
.componentsSeparatedByCharactersInSet
. Смотрите ответ ниже.Все упоминали,
componentsSeparatedByString:
но вы также можете использоватьCFStringTokenizer
(помните, чтоNSString
иCFString
являются взаимозаменяемыми), которые также будут использовать токены для естественных языков (например, китайский / японский, которые не разбивают слова на пробелы).источник
enumerateLinesUsingBlock:
иenumerateSubstringsInRange:options:usingBlock:
, последний из которых является блочной версией CFStringTokenizer. developer.apple.com/mac/library/documentation/Cocoa/Reference/… : developer.apple.com/mac/library/documentation/Cocoa/Reference/… :enumerate
методы доступны в прошивке 4 и позже, тоже.Если вы просто хотите разбить строку, используйте
-[NSString componentsSeparatedByString:]
. Для более сложной токенизации используйте класс NSScanner.источник
Если ваши потребности в токенизации более сложны, ознакомьтесь с моим открытым набором инструментов для анализа / разбора Cocoa String: ParseKit:
http://parsekit.com
Для простого разделения строк с использованием символа-разделителя (например, ':') ParseKit определенно будет излишним. Но опять же, для сложных нужд токенизации, ParseKit чрезвычайно мощный / гибкий.
Также см. Документацию по токену ParseKit .
источник
Если вы хотите использовать токены для нескольких символов, вы можете использовать NSString
componentsSeparatedByCharactersInSet
. NSCharacterSet имеет несколько удобных готовых наборов, таких какwhitespaceCharacterSet
иillegalCharacterSet
. И у него есть инициализаторы для диапазонов Unicode.Вы также можете комбинировать наборы символов и использовать их для токенизации, например так:
Имейте
componentsSeparatedByCharactersInSet
в виду, что это приведет к появлению пустых строк, если он встретит более одного члена charSet подряд, поэтому вы можете захотеть проверить длину менее 1.источник
Если вы хотите разбить строку на поисковые термины, сохранив «фразы в кавычках», вот
NSString
категория, которая учитывает различные типы пар цитат:""
''
‘’
“”
Использование:
Код:
источник
Если вы хотите разбить лингвистические особенности строки (слова, абзацы, символы, предложения и строки), используйте перечисление строк:
Этот API работает с другими языками, где пробелы не всегда являются разделителем (например, японский). Также использование
NSStringEnumerationByComposedCharacterSequences
является правильным способом перечисления по символам, так как многие незападные символы имеют длину более одного байта.источник
У меня был случай, когда мне пришлось разделить вывод консоли после запроса LDAP с помощью ldapsearch. Сначала настройте и выполните NSTask (здесь я нашел хороший пример кода: выполните команду терминала из приложения Какао ). Но затем мне пришлось разделить и проанализировать вывод, чтобы извлечь только имена серверов печати из вывода Ldap-запроса. К сожалению, это довольно утомительное манипулирование строками, которое не составило бы никаких проблем, если бы мы манипулировали C-строками / массивами с помощью простых операций с C-массивами. Итак, вот мой код с использованием объектов какао. Если у вас есть лучшие предложения, дайте мне знать.
источник
Я сам наткнулся на случай, когда было недостаточно просто разделить строку по компонентам на многие задачи, такие как
1 ) Разделение токена на типы
2) Добавление новых токенов
3) Разделение строки между пользовательскими замыканиями, как все слова между "{" и "} «
Для любых таких требований я нашел Parse Kit спасатель жизни.
Я использовал его для парсинга файлов .PGN (нотация prtable gaming) успешно, это очень быстро и легко.
источник