首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何确定NSString的第一个字符是否为字母

如何确定NSString的第一个字符是否为字母
EN

Stack Overflow用户
提问于 2013-05-31 22:51:06
回答 1查看 36K关注 0票数 21

在我的应用中

我需要知道字符串的第一个字符是否是字母

我将获得字符串的第一个字符,如下所示

代码语言:javascript
复制
NSString *codeString;
 NSString *firstLetter = [codeString substringFromIndex:1];

我可以通过比较a,b,c,.**来知道它。

代码语言:javascript
复制
if([firstLetter isEqualToString "a"] || ([firstLetter isEqualToString "A"] || ([firstLetter isEqualToString "b"] ......)

但有没有其他方法可以知道呢?

我需要为字母和符号显示不同的颜色。

我如何才能以简单的方式实现它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-31 22:58:20

首先,你的台词是:

代码语言:javascript
复制
NSString *firstLetter = [codeString substringFromIndex:1];

不会得到第一个字母。这将为您提供一个包含除第一个字符以外的所有原始字符串的新字符串。这与你想要的恰恰相反。您需要:

代码语言:javascript
复制
NSString *firstLetter = [codeString substringToIndex:1];

但是有一种更好的方法来判断第一个字符是否是字母。

代码语言:javascript
复制
unichar firstChar = [[codeString uppercaseString] characterAtIndex:0];
if (firstChar >= 'A' && firstChar <= 'Z') {
    // The first character is a letter from A-Z or a-z
}

然而,由于iOS应用与国际用户打交道,简单地查找字母A-Z中的字符是很不理想的。更好的方法是:

代码语言:javascript
复制
unichar firstChar = [codeString characterAtIndex:0];
NSCharacterSet *letters = [NSCharacterSet letterCharacterSet];
if ([letters characterIsMember:firstChar]) {
    // The first character is a letter in some alphabet
}

在少数情况下,这并不能像预期的那样工作。unichar仅包含16位字符。但是NSString值实际上可以包含一些32位字符。示例包括许多Emoji字符。所以这段代码可能会给出一个误报。理想情况下,您可能希望这样做:

代码语言:javascript
复制
NSRange first = [codeString rangeOfComposedCharacterSequenceAtIndex:0];
NSRange match = [codeString rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet] options:0 range:first];
if (match.location != NSNotFound) {
    // codeString starts with a letter
}        
票数 96
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16860108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档