检测NSString中是否存在不间断空格?

时间:2013-06-21 01:32:19

标签: ios unicode nsstring nscharacterset

我正在尝试创建一个NSCharacterSet,我可以用它来测试一个字符是否是空格。这个字符集:

[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 nonBreakingSpace中的字符是使用option-spacebar创建的。然而,此代码打印NO。

知道我可能做错了什么吗?或者有没有人知道现有的字符集包括所有可能的空格?我确定我错过了一些......

谢谢!

2 个答案:

答案 0 :(得分:3)

使用unichar代替char。这是characterAtIndex:的返回类型,并且不间断空格字符不适合一个字节,因此当您隐式将其强制转换为char时,该值将被截断。

答案 1 :(得分:-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 rangeOfString@" "];找到它,它将返回位于空间位置的NSRange。您甚至可以通过调用string = [string stringByReplacingCharactersInRange:[string rangeOfString:@" " withString:@""];

来删除空格