現象:`NSString *str = [NSString stringWithFormat:@"%@", value]; int v = [str intValue];` 期望 2 實得 0。
intValue 解析規則:**從左向右讀取數字,遇首個非數字字符停止**。若首字符非數字,直接返回 0。
NSString *cleanStr = [str stringByTrimmingCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]];
int value = [cleanStr intValue];
原理:`decimalDigitCharacterSet` 包含 0-9,`invertedSet` 取反得到**非數字字符集**,`trimmingCharactersInSet` 移除首尾非數字字符。
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\d+" options:0 error:nil];
NSTextCheckingResult *match = [regex firstMatchInString:str options:0 range:NSMakeRange(0, str.length)];
if (match) {
NSString *numStr = [str substringWithRange:match.range];
int value = [numStr intValue];
}
NSLog(@"Raw string: '%@' length=%lu", str, (unsigned long)str.length);
// 逐字符檢查
for (int i=0; i
理解 `intValue` 解析停止規則,徹底解決「明明有數字卻轉 0」疑難雜症。