【发布时间】:2011-03-05 18:17:01
【问题描述】:
我只是想知道如何确定 NSStrings 的第一个字符是否为数字。
【问题讨论】:
标签: iphone objective-c xcode nsstring numbers
我只是想知道如何确定 NSStrings 的第一个字符是否为数字。
【问题讨论】:
标签: iphone objective-c xcode nsstring numbers
BOOL hasLeadingNumberInString(NSString* s) {
if (s)
return [s length] && isnumber([s characterAtIndex:0]);
else
return NO;
}
如果您同时处理多个 NSString(例如循环遍历数组)并且您想检查每个 NSString 的格式(如前导数字),最好包含检查,这样您就不会尝试评估空的或不存在的字符串。
例子:
NSString* s = nil; //Edit: s needs to be initialized, at the very least, to nil.
hasLeadingNumberInString(s); //returns NO
hasLeadingNumberInString(@""); //returns NO
hasLeadingNumberInString(@"0123abc"); //returns YES
【讨论】:
是的。你可以这样做:
NSString *s = ...; // a string
unichar c = [s characterAtIndex:0];
if (c >= '0' && c <= '9') {
// you have a number!
}
【讨论】:
我可以想到两种方法。你可以使用
[string rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]].location == 0
或者你可以使用
[[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[string characterAtIndex:0]]
【讨论】:
检查返回值:
[myString rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]];
如果返回范围的location 值为0,则第一个字符匹配。
【讨论】:
而不是使用扫描整个字符串的调用,最好将第一个字符拉出来然后看看它是什么:
char test = [myString characterAtIndex:0];
if (test >= '0' && test <= '9')
return YES
else
return NO
【讨论】: