16

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

所以“AbCdE123”变成了“aBcDe123”

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

4

9 回答 9

24

Apache Commons StringUtils 有一个swapCase方法。

于 2009-11-13T15:10:04.847 回答
22

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

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 字符。

于 2009-11-13T15:12:39.823 回答
2

我想一定有一种方法可以遍历字符串并翻转每个字符

正确的。该类java.lang.Character在每个isUpperCase()方法下为您提供了该方法。对其进行测试并根据结果使用toLowerCase()ortoUpperCase()方法。将每个结果附加到 a StringBuilder,你应该没问题。

于 2009-11-13T15:12:38.383 回答
2

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

t += Character.isUpperCase(c) ? Character.toLowerCase(c) : Character.toUpperCase(c);
于 2016-04-27T22:09:10.640 回答
2

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
于 2018-08-29T07:19:12.747 回答
1

我认为最简单的解决方案是这样的:

public static String reverseCase(String text) {
    StringBuilder sb = new StringBuilder();
    for (char c : text.toCharArray())
        sb.append(Character.isUpperCase(c) ? 
                Character.toLowerCase(c) : 
                Character.toUpperCase(c));
    return sb.toString();
}

我认为您可以更轻松地阅读此内容,并且 StringBuilder 无论如何都有一个 append(char) 方法 +Character.toUpperCase并且toLowerCase都只是静态方法。我只是对唯一的 StringBuilder 示例也包含 ascii 索引算法感到难过。

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

public static String reverseCase(String text) {
    StringBuilder sb = new StringBuilder();
    for (char c : text.toCharArray())
        if (Character.isUpperCase(c)) 
            c = Character.toLowerCase(c);
        else
            c = Character.toUpperCase(c);
        sb.append(c);
    return sb.toString();
}

编辑 Java 8+(取自 @Arun 的答案的 StringBuilder 收集器代码)

public static String reverseCase(String text) {
    return text.chars()
        .map(c -> Character.isUpperCase(c) ? 
            Character.toLowerCase(c) : 
            Character.toUpperCase(c))
        .collect(
            StringBuilder::new,
            StringBuilder::appendCodePoint,
            StringBuilder::append)
        .toString();
}
于 2020-06-13T18:20:40.593 回答
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();
}
于 2016-04-03T05:31:12.433 回答
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);
    }
}
于 2018-09-01T08:12:49.410 回答
-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);
    }
}
于 2015-01-27T17:32:02.923 回答