如何检测字符串末尾是否包含标点符号?

时间:2010-04-22 17:07:34

标签: iphone objective-c cocoa-touch string nsstring

让我们假设我有字符串:

“你好我喜欢你的鞋#today ......!”

我用空格对字符串进行标记:

return [string componentsSeparatedByString:@" "];

所以我的数组包含:

Hello
I
like
your
shoes
#today...!

我想专注于“#today ......!”我在改变字体颜色的前缀中有#的任何单词。

如何确保只有“#today”的字体颜色发生变化?

我基本上想知道一个单词的末尾是否有标点符号,并在标点符号前更改字符的颜色。

5 个答案:

答案 0 :(得分:2)

考虑使用RegexKitLite和此方法:

- (NSRange)rangeOfRegex:(NSString *)regex
                options:(RKLRegexOptions)options
                inRange:(NSRange)range
                capture:(NSInteger)capture
                  error:(NSError **)error;

你想要的正则表达式就像@"#\\S+\\b"。这个正则表达式说“找一个'#'字符后跟一个或多个非空格字符后跟一个单词边界”。

然后,这将返回字符串中匹配的正则表达式的范围以匹配。

答案 1 :(得分:2)

我对你的问题感到困惑。您是在尝试检测末尾带有标点符号的字符串还是在开头使用#标记?

无论如何:

for (NSString *word in [string componentsSeparatedByString:@" "]) {
    if ([word hasPrefix:@"#"])NSLog(@"%@ starts with #",word);
    if ([word hasSuffix:@"!"])NSLog(@"%@ end with !",word);
}

答案 2 :(得分:2)

您可以执行以下操作:

if ([[NSCharacterSet symbolCharacterSet] characterIsMember:[word characterAtIndex:0]]) NSLog(@"%@", word);

这是为了测试字符串开头的符号 - 要在最后测试,你会使用[word characterAtIndex:([word length] - 1)]

编辑:好的,我想我现在明白了这个问题。如果您只想在颜色设置之前更改字符的颜色,您可以执行以下操作:

NSRange punctCharRange = [word rangeOfCharacterFromSet:[NSCharacterSet punctuationCharacterSet]];
for (int i = 0; i < punctCharRange.location; i++) {
    //change the color of the character
}

答案 3 :(得分:1)

以下代码应从word的末尾开始,直到找到不是字母数字的字符,如果找到这样的字符则进行测试,如果找到,则删除该字符后的任何内容。 (未经测试的代码)

NSString *wordWithoutTrailingNonAlphanum;
NSRange firstNonAlphanumCharFromEnd =
        [word rangeOfCharacterFromSet:[NSCharacterSet alphanumericCharacterSet]
                              options:NSBackwardsSearch];
if (firstNonAlphanumCharFromEnd.location != NSNotFound) {
    wordWithoutTrailingNonAlphanum =
            [word substringToIndex:(firstNonAlphanumCharFromEnd.location + 1)];
}

答案 4 :(得分:0)

我尝试将所有以#开头并基于NSPunctuationCharacterSet拆分的单词进行标记。这有效,但是我丢失了标点符号。