如何將NSString
縮小爲小寫ASCII字符(/a-z/
)?非英文字母字符應轉換爲ASCII字符。具體而言,大寫字符變爲小寫字母(A → a),非英文字符變爲英文字符(ñ→ n),所有其他字符都將被丟棄。將NSString縮小爲小寫ASCII字母字符
例如:「韋斯特羅斯,瑞典」成爲「vasterassweden」。
如何將NSString
縮小爲小寫ASCII字符(/a-z/
)?非英文字母字符應轉換爲ASCII字符。具體而言,大寫字符變爲小寫字母(A → a),非英文字符變爲英文字符(ñ→ n),所有其他字符都將被丟棄。將NSString縮小爲小寫ASCII字母字符
例如:「韋斯特羅斯,瑞典」成爲「vasterassweden」。
您可以將字符串轉換爲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:
將一串字符串連接到由提供的字符串分隔的單個字符串中 - 並且我們傳遞了一個空的連接器。
你可以做到這一點如下:
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