如何在Java中反转字符串的大小写?

如何在Java中反转字符串的大小写?,java,string,case,case-sensitive,Java,String,Case,Case Sensitive,我想更改一个字符串,使所有的大写字符变为小写,所有的小写字符变为大写。数字字符被忽略 所以“AbCdE123”变成了“AbCdE123” 我想一定有一种方法可以遍历字符串并翻转每个字符,或者可能有某种正则表达式可以做到这一点。Apache Commons StringUtils有一种方法 我想一定有办法遍历字符串并翻转每个字符 对。该类在每个下为您提供了相应的isUpperCase()方法。对其进行测试,并根据结果使用toLowerCase()或toUpperCase()方法。将每个结果附加到一

我想更改一个字符串,使所有的大写字符变为小写,所有的小写字符变为大写。数字字符被忽略

所以“AbCdE123”变成了“AbCdE123”


我想一定有一种方法可以遍历字符串并翻转每个字符,或者可能有某种正则表达式可以做到这一点。

Apache Commons StringUtils有一种方法

我想一定有办法遍历字符串并翻转每个字符


对。该类在每个下为您提供了相应的
isUpperCase()
方法。对其进行测试,并根据结果使用
toLowerCase()
toUpperCase()
方法。将每个结果附加到一个
StringBuilder
,您应该会没事。

我不相信有任何内置的东西可以做到这一点(这是相对不寻常的)。不过,这应该可以做到:

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);
}
publicstaticstringreversecase(字符串文本)
{
char[]chars=text.toCharArray();
for(int i=0;i

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

我确实意识到给定的线程非常旧,但有更好的解决方法:

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);
    }
}
类切换
{ 
公共静态void main()
{ 
String str=“这是一个字符串”;
字符串t=“”;
对于(int x=0;x
我们也可以使用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();
}
String swapCase(字符串文本){
StringBuilder textSB=新的StringBuilder(文本);
对于(int i=0;i64&&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));
}
返回textSB.toString();
}

基于Faraz的方法,我认为字符转换可以简单到:

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

Java8及以上版本:

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
公共类反向实例{
公共静态void main(字符串[]args){
char[]char_arr=args[0]。toCharArray();
for(int i=0;i
我认为最简单的解决方案是:

publicstaticstringreversecase(字符串文本){
StringBuilder sb=新的StringBuilder();
for(char c:text.toCharArray())
sb.append(字符)是否大写?
字符.小写(c):
特征。toUpperCase(c));
使某人返回字符串();
}
我认为您可以更轻松地阅读这篇文章,StringBuilder有一个append(char)方法+
Character.toUpperCase
toLowerCase
都是静态方法。我只是觉得很遗憾,唯一的StringBuilder示例也包含了ascii索引算法

对于那些不喜欢三元表达式的人,这里有一个等价物:

publicstaticstringreversecase(字符串文本){
StringBuilder sb=新的StringBuilder();
for(char c:text.toCharArray())
if(字符.大写(c))
c=字符。toLowerCase(c);
其他的
c=字符。toUpperCase(c);
sb.附加(c);
使某人返回字符串();
}
编辑Java 8+(StringBuilder收集器代码取自@Arun的答案)

publicstaticstringreversecase(字符串文本){
返回text.chars()
.map(c->Character.isUpperCase(c)?
字符.小写(c):
字符(c))
.收集(
StringBuilder::新建,
StringBuilder::appendCodePoint,
StringBuilder::append)
.toString();
}

他们的StringUtils是处理字符串的最佳工具之一。向大型库中添加依赖项(仅针对一个复杂度非常有限的函数)是有争议的。同意依赖项,但是如果你环顾四周,你可能会发现Commons代码可以简化你的代码的其他地方。我还想补充一点,使用一种众所周知的经过大量测试和广泛使用的方法,比如Apache Commons,有很多优点。如果你自己实现它,你的基本算法可能没有什么问题,但是(除非你让Jon Skeet为你编写),你可能会因为一个或一些这样的错误而有一点偏差,直到以后才会出现。不需要附加到StringBuilder-你已经确切地知道输出会有多大,你可以在一个数组中就地执行。如果他以后不需要操作它,这确实是可行的。Jon:如果你遵守特定于语言环境的规则,更改字符串的大小写不一定能保持
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);
    }
}