2012-03-01 56 views
2

如何将NSString缩小为小写ASCII字符(/a-z/)?非英文字母字符应转换为ASCII字符。具体而言,大写字符变为小写字母(A → a),非英文字符变为英文字符(ñ→ n),所有其他字符都将被丢弃。将NSString缩小为小写ASCII字母字符

例如:“韦斯特罗斯,瑞典”成为“vasterassweden”

回答

6

您可以将字符串转换为NSData,其中包含代表不同编码的字符串的字节,并允许使用dataUsingEncoding:allowLossyConversion进行有损转换。然后,你可以转换NSData回的NSString

NSString *unicode = @"Västerås, Sweden"; 
NSString *ascii = [[NSString alloc] 
        initWithData:[unicode dataUsingEncoding:NSASCIIStringEncoding 
             allowLossyConversion:YES 
           ] 
         encoding:NSASCIIStringEncoding 
        ]; 

结果是“韦斯特罗斯,瑞典”。现在有一个lowercaseString方法等,如果你需要进一步。

编辑:

哎呀,错过了问题的终结“和其他所有字符都抛弃了”,你希望走的更远:

NSString *lower = [ascii lowercaseString]; 
NSString *letters = [[lower 
         componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet] 
                  invertedSet] 
                  ] 
         componentsJoinedByString:@"" 
        ]; 

这看起来可怕(和良好的参数转换为C字符串并直接执行),但它的作用如下:componentsSeparatedByCharactersInSet:通过将提供的集中的字符视为分隔符返回字符串数组; componentsJoinedByString:将一串字符串连接到由提供的字符串分隔的单个字符串中 - 并且我们传递了一个空的连接器。

1

你可以做到这一点如下:

NSString *inputString = @"Västerås ;; Swed en "; 

NSLog(@"Input String %@",inputString); 

inputString = [inputString lowercaseString]; // Lower case 

inputString = [inputString stringByReplacingOccurrencesOfString:@" " withString:@""]; //Whitespace 

inputString = [[inputString componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet] invertedSet]] componentsJoinedByString:@""]; //Punctuation 

inputString = [[inputString componentsSeparatedByCharactersInSet:[NSCharacterSet decomposableCharacterSet]] componentsJoinedByString:@""]; // non-english characters