Уменьшите строку NSString до строчных букв ascii alpha - PullRequest
2 голосов
/ 01 марта 2012

Как можно уменьшить NSString до строчных букв ascii alpha (/a-z/)? Неанглийские буквенные символы должны быть преобразованы в символы ascii. В частности, заглавные буквы становятся строчными (A & rarr; a), неанглийские символы становятся английскими (ñ & rarr; n), а все остальные символы отбрасываются.

Например: "Västerås, Sweden" становится "vasterassweden" .

Ответы [ 2 ]

6 голосов
/ 01 марта 2012

Вы можете преобразовать строку в NSData, содержащую байты, представляющие строку в другой кодировке, и разрешить преобразование с потерями, используя dataUsingEncoding:allowLossyConversion.Тогда вы можете просто преобразовать NSData обратно в NSString:

NSString *unicode = @"Västerås, Sweden";
NSString *ascii = [[NSString alloc]
                   initWithData:[unicode dataUsingEncoding:NSASCIIStringEncoding
                                      allowLossyConversion:YES
                                ]
                       encoding:NSASCIIStringEncoding
                  ];

Результат - "Вестерос, Швеция".Теперь есть метод lowercaseString и т. Д., Если вам нужно идти дальше.

Редактировать:

Упс, пропустили конец вопроса "и все другие символы отбрасываются", вы делаетехочу пойти дальше:

NSString *lower = [ascii lowercaseString];
NSString *letters = [[lower
                      componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet]
                                                            invertedSet]
                                                           ]
                      componentsJoinedByString:@""
                    ];

Это выглядит ужасно (и хороший аргумент, чтобы преобразовать в C-строку и сделать это более напрямую), но это делает работу: componentsSeparatedByCharactersInSet: возвращает массив строкобрабатывая символы в поставляемом наборе как разделители;componentsJoinedByString: объединяет массив строк в одну строку, разделенную предоставленной строкой - и мы передали пустое объединение.

1 голос
/ 01 марта 2012

Вы можете сделать это следующим образом:

NSString *inputString = @"Västerås  ;; Swed   en    ";

NSLog(@"Input String %@",inputString);

inputString = [inputString lowercaseString]; // Lower case

inputString = [inputString stringByReplacingOccurrencesOfString:@" " withString:@""]; //Whitespace

inputString = [[inputString componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet] invertedSet]] componentsJoinedByString:@""]; //Punctuation

inputString = [[inputString componentsSeparatedByCharactersInSet:[NSCharacterSet decomposableCharacterSet]] componentsJoinedByString:@""]; // non-english characters
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...