2013-06-21 13 views
1

Я пытаюсь создать NSCharacterSet, который я могу использовать, чтобы проверить, является ли символ пробелом или нет. Этот набор символов:Определить наличие неразрывного пространства в NSString?

[NSCharacterSet whitespaceAndNewlineCharacterSet] 

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

myWhiteSpaceCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"  \n\r\t"]; 

Первый символ в моем наборе символов - это просто пространство, созданное пробелом. Второй символ будет представлять собой пробел в вашем браузере, однако в XCode он отображается как точка, которая представляет собой неразрывное пространство. Я создал его, удерживая клавишу опций на моем Mac, а затем нажав пробел.

Для проверки членства я попытался это:

NSString* nonBreakingSpace = @" "; 
char nonBreakingSpaceChar = [nonBreakingSpace characterAtIndex:0]; 
if ([myWhiteSpaceCharacterSet characterIsMember:nonBreakingSpaceChar]) { 
    NSLog(@"YES"); 
} else { 
    NSLog(@"NO"); 
} 

Характер в NSString неразрывный пробел был создан с опцией-пробел. Однако этот код печатает NO.

Любая идея, что я могу делать неправильно? Или кто-нибудь знает о существующем наборе символов, который включает все возможные типы пробелов? Я уверен, что мне не хватает ...

Спасибо!

ответ

3

Использовать unichar вместо char. Это возвращаемый тип characterAtIndex:, а неразрывный символ пробела не вписывается в один байт, поэтому значение усекается, когда вы неявно бросаете его на char.

-1

Вы можете искать NSString для любых пространств, как это:

NSString* string; 
string = [[NSString alloc] initWithFormat:@"Hello World"]; 
if ([string rangeOfString:@" "].location == NSNotFound) { 
    NSLog(@"Has space"); 
} 
else { 
    NSLog(@"Doesn't have space"); 
} 

Хорошая вещь о том, что, как только вы обнаружите, что NSStrin имеет место, вы можете найти его с помощью вызова [string [email protected]" "];, который будет возвращать NSRange, который находится в месте расположения пространства. Вы даже можете удалить место, позвонив по телефону string = [string stringByReplacingCharactersInRange:[string rangeOfString:@" " withString:@""];

+0

Этот вопрос касается нераспространения символа пробела, а не обычного пространства. – rmaddy