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

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

所以“AbCdE123”变成“aBcDe123”

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

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

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

Apache Commons StringUtils有一个swapCase方法。

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

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

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

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

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 

我们也可以使用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(); } 
 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); } } 

我确实意识到给定的线程已经很老了,但有一种更好的解决方法:

 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); } }