2012-03-01 51 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 
相關問題