清理提取所有非数字字符的字符串

时间:2014-04-02 13:10:49

标签: objective-c

我在Objective C中很新。我试图将以下字符串5896.3454A转换为数字字符串58963454。知道如何做到这一点。

我一直在尝试使用NSScanner课程,但我不确定这是否是最好的方法。

3 个答案:

答案 0 :(得分:3)

一种可能的解决方案是使用带正则表达式的字符串替换:

NSString *mixed = @"5896.3454A";
NSString *pattern = @"\\D"; // Pattern for "not a digit"
NSString *digitsOnly = [mixed stringByReplacingOccurrencesOfString:pattern
                                withString:@""
                                   options:NSRegularExpressionSearch
                                     range:NSMakeRange(0, [mixed length])];

答案 1 :(得分:0)

Objective-C包含很多小技巧。这是解决问题的愚蠢行为。

NSString *string = @"5896.3454A";

NSCharacterSet *digits = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
NSCharacterSet *nonDigits = [digits invertedSet];
NSArray *digitSubstrings = [componentsSeparatedByCharactersInSet:nonDigits];

NSString *result = [digitSubstrings componentsJoinedByString:@""];

result将只包含string中的数字。

我创建一个包含所有数字的字符集。我使用invertedSet来获取除数字之外的每个字符的集合。这是直截了当的,接下来是愚蠢的部分。接下来,我将字符串拆分为子字符串数组。这将具有剥离所有非数字字符的效果,但所有数字都被分解为子字符串。在这种情况下,digitSubstrings将为@[@"5896", @"3454", @""]。不是问题,我将所有子串连接在一起以创建最终字符串。

答案 2 :(得分:0)

你也可以这样做 你问题中提到的yourString NSInteger newInt = [[[yourString stringByReplacingOccurrencesOfString:@"。" withString:@""] stringByReplacingOccurrencesOfString:@" A" withString:@""] integerValue];

ADDED:NSInteger newInt = [[@" 123.123A" stringByReplacingOccurrencesOfString:@""。 withString:@""] integerValue];结合NSString和NSScanner方法,integerValue忽略从第一次出现角色开始的所有内容

您可以在NSString类中找到它。这是否是更好的解决方案取决于你的"字符串数"中不需要的文字。你想要替换/删除。