如何在Java中反转String的大小写?

问题描述 投票:12回答:8

我想更改一个字符串,以便所有大写字符变为小写,并且所有小写字符变为大写。数字字符只是被忽略。

所以“AbCdE123”变成“aBcDe123”

我想必须有一种方法来遍历String并翻转每个字符,或者可能是一些可以做到的正则表达式。

java string case case-sensitive
8个回答
16
投票

我不相信有任何内置的东西(这是相对不寻常的)。这应该这样做:

public static String reverseCase(String text)
{
    char[] chars = text.toCharArray();
    for (int i = 0; i < chars.length; i++)
    {
        char c = chars[i];
        if (Character.isUpperCase(c))
        {
            chars[i] = Character.toLowerCase(c);
        }
        else if (Character.isLowerCase(c))
        {
            chars[i] = Character.toUpperCase(c);
        }
    }
    return new String(chars);
}

请注意,这不会执行String.toUpperCase / String.toLowerCase所做的特定于语言环境的更改。它也不处理非BMP字符。


20
投票

Apache Commons StringUtils有一个swapCase方法。


2
投票

我想必须有一种方法来遍历String并翻转每个字符

正确。 java.lang.Character类为您提供每种isUpperCase()方法。对其进行测试并根据结果使用toLowerCase()toUpperCase()方法。将每个结果附加到StringBuilder,你应该没事。


2
投票

根据Faraz的方法,我认为字符转换可以简单如下:

t += Character.isUpperCase(c) ? Character.toLowerCase(c) : Character.toUpperCase(c);

1
投票

Java 8及以上版本:

String myString = "MySampleString123";
System.out.println(myString.chars().map(c -> Character.isLetter(c) ? c ^ ' ' : c).collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString());

反映信件情况的代码,重要的是要注意:

Character.isLetter(c) ? c ^ ' ' : c

0
投票

我们也可以使用StringBuilder对象,因为它有字符替换方法。但是,可能需要一些额外的空间来存储StringBuilder对象。因此,如果空间无关紧要并且使解决方案易于理解,这将有所帮助。

String swapCase(String text) {
    StringBuilder textSB = new StringBuilder(text);
    for(int i = 0; i < text.length(); i++) {
        if(text.charAt(i) > 64 && text.charAt(i) < 91)
            textSB.setCharAt(i, (char)(text.charAt(i) + 32));
        else if(text.charAt(i) > 96 && text.charAt(i) < 123)
            textSB.setCharAt(i, (char)(text.charAt(i) - 32));
    }
    return textSB.toString();
}

0
投票
public class ReverseCase {
    public  static void main(String[] args){ 
        char[] char_arr = args[0].toCharArray();
        for (int i = 0; i < char_arr.length; i++) {
            if (Character.isLowerCase(char_arr[i])) {
                char_arr[i] = Character.toUpperCase(char_arr[i]);
            }else {
                char_arr[i] = Character.toLowerCase(char_arr[i]);
            }
        }
        String reversed = new String(char_arr);
        System.out.println(reversed);
    }
}

-1
投票

我确实知道给定的线程很老,但有一种更好的解决方法:

class Toggle
{ 
    public static void main()
    { 
        String str = "This is a String";
        String t = "";
        for (int x = 0; x < str.length(); x++)
        {  
            char c = str.charAt(x);
            boolean check = Character.isUpperCase(c);
            if (check == true)
                t = t + Character.toLowerCase(c);
            else
                t = t + Character.toUpperCase(c);
        }
        System.out.println (t);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.