Qual é a melhor maneira de tokenizar / dividir um NSString no Objective-C?
objective-c
cocoa
tokenize
Ned Batchelder
fonte
fonte
[anArray componentsJoinedByString:@":"];
.componentsSeparatedByCharactersInSet
. Veja a resposta abaixo.Todos já mencionaram,
componentsSeparatedByString:
mas você também pode usarCFStringTokenizer
(lembre-se de queNSString
eCFString
são intercambiáveis) que também simbolizarão os idiomas naturais (como chinês / japonês, que não dividem palavras nos espaços).fonte
enumerateLinesUsingBlock:
eenumerateSubstringsInRange:options:usingBlock:
, o último dos quais é uma versão baseada em bloco do CFStringTokenizer. developer.apple.com/mac/library/documentation/Cocoa/Reference/… : developer.apple.com/mac/library/documentation/Cocoa/Reference/… :enumerate
métodos também estão disponíveis no iOS 4 e posterior.Se você quiser apenas dividir uma string, use
-[NSString componentsSeparatedByString:]
. Para tokenização mais complexa, use a classe NSScanner.fonte
Se suas necessidades de tokenização são mais complexas, confira meu kit de ferramentas de análise / análise de código-fonte Cocoa String: ParseKit:
http://parsekit.com
Para uma simples divisão de strings usando um delimitador char (como ':'), o ParseKit definitivamente seria um exagero. Porém, novamente, para necessidades complexas de tokenização, o ParseKit é extremamente poderoso / flexível.
Consulte também a documentação do ParseKit Tokenization .
fonte
Se você deseja tokenizar em vários caracteres, use os NSString
componentsSeparatedByCharactersInSet
. O NSCharacterSet possui alguns conjuntos pré-fabricados úteis, como owhitespaceCharacterSet
e oillegalCharacterSet
. E possui inicializadores para intervalos Unicode.Você também pode combinar conjuntos de caracteres e usá-los para tokenizar, assim:
Esteja ciente de que
componentsSeparatedByCharactersInSet
produzirá seqüências de caracteres em branco se encontrar mais de um membro do charSet em uma linha; portanto, convém testar comprimentos menores que 1.fonte
Se você deseja tokenizar uma string em termos de pesquisa e preservar "frases entre aspas", aqui está uma
NSString
categoria que respeita vários tipos de pares de aspas:""
''
‘’
“”
Uso:
Código:
fonte
Se você estiver procurando dividir os recursos lingüísticos de uma string (palavras, parágrafos, caracteres, frases e linhas), use a enumeração de string:
Essa API funciona com outros idiomas onde os espaços nem sempre são o delimitador (por exemplo, japonês). Também
NSStringEnumerationByComposedCharacterSequences
é usada a maneira correta de enumerar os caracteres, pois muitos caracteres não ocidentais têm mais de um byte.fonte
Eu tive um caso em que tive que dividir a saída do console após uma consulta LDAP com ldapsearch. Primeiro configure e execute o NSTask (encontrei um bom exemplo de código aqui: Execute um comando de terminal a partir de um aplicativo Cocoa ). Mas tive que dividir e analisar a saída para extrair apenas os nomes dos servidores de impressão da saída de consulta Ldap. Infelizmente, é uma manipulação tediosa de strings que não seria um problema se manipulássemos C-strings / arrays com operações simples de arranjos em C. Então, aqui está o meu código usando objetos de cacau. Se você tiver sugestões melhores, me avise.
fonte
Eu me deparei com uma instância em que não bastava separar a string por componente, muitas tarefas como
1) Categorizar token nos tipos
2) Adicionar novos tokens
3) Separar string entre fechamentos personalizados, como todas as palavras entre "{" e "} "
Para esses requisitos, achei o Parse Kit um salva - vidas.
Usei-o para analisar com êxito arquivos .PGN (notável tabela de jogos), muito rápido e leve.
fonte