如何在NSString中反转字母大小写(Objective-C)

joe*_*zuu 2 objective-c nsstring

我想知道如何在NSString或NSMutableString中反转字符的大小写,忽略非字母字符.例如,"HeLLO jIM66"将成为"hEllo Jim66".

我知道有关uppercaseString,lowercaseString和capitalizedString但我还没弄清楚如何反转字符串中所有字母的大小写.

谢谢你的帮助!

Ada*_*eld 6

只需遍历字符串中的所有字符.如果字符是大写的,请用小写字母替换它; 如果它是小写的,请用大写字母替换它; 否则,不管它.例如:

+ (NSString *) reverseCase:(NSString *)str
{
    int length = [str length];
    NSMutableString *result = [NSMutableString stringWithCapacity:length];

    for (int i = 0; i < length; i++)
    {
        unichar ch = [str characterAtIndex:i];
        if (islower(ch))
            ch = toupper(ch);
        else if (isupper(ch))
            ch = tolower(ch);
        [result appendString:[NSString stringWithCharacters:&ch length:1]];
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

  • 默认情况下,`islower()`和朋友将在C语言环境中运行,并且可能无法正常运行非ASCII字符.我建议使用`[[NSCharacterSet lowercaseLetterCharacterSet] characterIsMember:ch]`和` - [NSString lowercaseString]`及其大写的兄弟姐妹. (2认同)