NSString isEqualToString: для \n
У меня есть приложение Какао, которое вызывает веб-сервис. Когда я анализирую ответ от веб-службы, я получаю \n как последний символ в моем делегате foundCharacters для NSXMLParser для каждого элемента в XML.
Когда я пытаюсь сделать следующее:
if (![string isEqualToString:@"\n"])
Проверка всегда не сможет перехватить новую строку. Кто-нибудь знает хороший способ проверки строки?
Я также считаю странным, что каждый элемент будет иметь новую строку в конце каждого значения, хотя я не вижу доказательств этого в выходных данных веб-службы.
Это довольно проблематично для чего-то, что должно быть исключительно легко сделать.
3 ответа
Я думаю, что это именно то, что вам нужно?
text = [text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
Когда я анализирую ответ от веб-службы, я получаю \ n как последний символ...
Когда я пытаюсь сделать следующее:
if (![string isEqualToString:@"\n"])
Проверка всегда не сможет перехватить новую строку.
Это сообщение вернется только YES
если string
один символ в длину, и этот символ \n
,
Если вы хотите проверить, заканчивается ли строка\n
, то вам нужно использовать hasSuffix:
:
if (![string hasSuffix:@"\n"])
Если вы хотите раздеться \n
с конца строки и использовать то, что остается, решение phunehehe является правильным.
Редактировать: В ответе Джереми У. Шермана, он указывает, что веб-сервис может давать вам CRLF-завершенный текст. Это верный момент, и вы должны не только искать \n
в конце строки, но также проверьте полный \r\n
последовательность. Код, который он представляет, является одним из способов сделать это. Как бы вы это ни делали, вам все равно нужно удалить разделитель строк, даже если это \r\n
последовательность.
Веб-служба, скорее всего, завершает все строки CRLF
т.е. "\r\n"
, Вы в системе UNIX, поэтому символ перевода строки '\n'
берется в качестве разделителя строк; возврат каретки '\r'
оставлен как часть предыдущей строки. При печати он будет иметь тот же эффект, что и '\n'
, Вы подтвердили (используя, скажем, strvis
) что последний символ строки '\n'
и не '\r'
?
-[NSString hasSuffix:]
будет ловить только тот символ новой строки, который вы предоставляете. Чтобы проверить, заканчивается ли строка новой строкой или пробелом, вот метод предполагаемой категории:
- (BOOL)my_hasWhitespaceOrNewlineSuffix {
NSRange r = [self rangeOfCharacterFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]
options:NSBackwardsSearch];
BOOL foundChar = r.location != NSNotFound;
BOOL isLineFinal = foundChar && (r.location + r.length == [self length]);
return isLineFinal;
}
Вы можете использовать предложение Phunehehe о text = [text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]
удалить любые пробелы или символы новой строки.