Evo*_*lve 13 string cocoa camelcasing objective-c
我正在寻找将字符串从驼峰格式转换为标题案例格式的最简单方法.
如何将"playerName"更改为"玩家姓名"?
web*_*rsx 21
NSString *str = @"playerName";
NSMutableString *str2 = [NSMutableString string];
for (NSInteger i=0; i<str.length; i++){
NSString *ch = [str substringWithRange:NSMakeRange(i, 1)];
if ([ch rangeOfCharacterFromSet:[NSCharacterSet uppercaseLetterCharacterSet]].location != NSNotFound) {
[str2 appendString:@" "];
}
[str2 appendString:ch];
}
NSLog(@"%@", str2.capitalizedString);
Run Code Online (Sandbox Code Playgroud)
Ste*_*ord 15
这是一个更简单的Swift版本.我把它扔进了一个扩展名
extension String {
func stringFromCamelCase() -> String {
var string = self
string = string.stringByReplacingOccurrencesOfString("([a-z])([A-Z])", withString: "$1 $2", options: NSStringCompareOptions.RegularExpressionSearch, range: Range<String.Index>(start: string.startIndex, end: string.endIndex))
string.replaceRange(startIndex...startIndex, with: String(self[startIndex]).capitalizedString)
return string
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
var str = "helloWorld"
str = str.stringFromCamelCase()
Run Code Online (Sandbox Code Playgroud)
emd*_*og4 12
尝试使用正则表达式替换
NSString *modified = [input stringByReplacingOccurrencesOfString:@"([a-z])([A-Z])"
withString:@"$1 $2"
options:NSRegularExpressionSearch
range:NSMakeRange(0, input.length)];
Run Code Online (Sandbox Code Playgroud)
小智 5
使用NSCharacterSet稍短一些:
__block NSString *str = @"myVerySpecialPlayerName" ;
// split at uppercase letters
NSArray *splitString = [str componentsSeparatedByCharactersInSet:
[NSCharacterSet uppercaseLetterCharacterSet]] ;
// get the uppercase letters
NSArray *upperCaseLetters = [str componentsSeparatedByCharactersInSet:
[[NSCharacterSet uppercaseLetterCharacterSet] invertedSet]] ;
// join with two spaces
str = [splitString componentsJoinedByString:@" "] ;
__block NSInteger offset = 0 ;
// replace each second space with the missing uppercase letter
[upperCaseLetters enumerateObjectsUsingBlock:^(NSString *character, NSUInteger idx, BOOL *stop) {
if( [character length] > 0 ) {
str = [str stringByReplacingCharactersInRange:NSMakeRange(idx+offset+1, 1) withString:character] ;
offset += 2 ;
}
}] ;
// & capitalize the first one
str = [str capitalizedString] ;
NSLog(@"%@", str) ; // "My Very Special Player Name"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8886 次 |
| 最近记录: |