1

我正在尝试创建一个 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 中的字符是使用选项空格键创建的。然而,这段代码打印的是 NO。

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

谢谢!

4

2 回答 2

3

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

于 2013-06-21T03:53:52.150 回答
-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@" "];which 来定位它,这将返回一个位于空间位置的 NSRange。您甚至可以通过调用删除空间string = [string stringByReplacingCharactersInRange:[string rangeOfString:@" " withString:@""];

于 2013-06-21T03:10:13.933 回答