iphone сравнить с NSString - PullRequest
       5

iphone сравнить с NSString

1 голос
/ 17 ноября 2009

Я сравнивал строку из XML с другой строкой, и результаты показали, что они не равны. но в NSLog () оба были одинаковыми (например, Valore Books).

Затем я проверил источник XML и узнал, что настоящая строка - "Valore Books" и фактически является пробелом. но проблема в том, что когда я сравниваю его с @ "Valore Books", он говорит, что оба они не одинаковы.

Что делать ??

Ответы [ 3 ]

2 голосов
/ 17 ноября 2009

Примечание: Я заменяю свой первоначальный ответ тем, который действительно подходит для этой проблемы. Извините за первоначальное недоразумение.

Следующая строка удалит html-сущности в вашей строке.

NSString *A = @"Valore Books";
NSString *B = (NSString *)CFXMLCreateStringByUnescapingEntities(NULL, (CFStringRef)A, NULL);

Я не смог найти эквивалентную функцию более высокого уровня, но производительность должна быть превосходной. Если я правильно прочитал документы, вы можете передать CFDictionaryRef в качестве третьего аргумента, чтобы указать дополнительные преобразования, но, похоже, это хорошо справляется со стандартными.

Документы здесь .

Обратите внимание, что, вероятно, будет хорошей идеей обращаться с кодировкой там, где вы тянете эти строки в свою программу, а не при каждом сравнении.

Также найдена вторая часть этого, которую вы должны рассмотреть. & # 160 - это не просто пробел, это неразрывный пробел, который приведенный выше код преобразует в \ 312 вместо стандартного пробела. На самом деле это отдельные символы в кодировке, и при сравнении строк произойдет сбой.

Возможно, было бы проще заменить # 160 на # 32, используя

- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement

и затем запустить его через эскейп.

Мне также пришло в голову, что CFXMLCreateStringByUnescapingEntities не будет доступен на iphone. Вот ссылка на пример, который показывает, как сделать аналогичные преобразования на iphone.

0 голосов
/ 16 февраля 2012

Я решил проблему с помощью утилиты разбора строк, предоставленной Google. Спасибо всем.

0 голосов
/ 18 ноября 2009

- неразрывный пробел (значение Unicode U + 00A0) Обычный пробел (в @ "Valore Books") имеет значение Unicode U + 0020. Так что это не один и тот же символ, и две строки не равны.

...