Как я могу инвертировать случай String в Java?
Я хочу изменить строку так, чтобы все символы в верхнем регистре становились строчными, а все символы нижнего регистра – в верхнем регистре. Числовые символы просто игнорируются.
поэтому “AbCdE123” становится “aBcDe123”
Я предполагаю, что должен быть способ итерации через String и переворачивать каждый символ, или, возможно, какое-то регулярное выражение, которое могло бы это сделать.
- Строка Литеральный адрес между единицами перевода
- Как прочитать весь файл в строке с помощью C #?
- Извлечение уникальных чисел из строки в R
- Как преобразовать String в BigInteger?
- Получить OutputStream в строку
- Как я могу выделить Unescape и Reescape в .net?
- Как class String переопределяет оператор +?
- Как unescape строковый литерал Java в Java?
- Могу ли я преобразовать значение строки C # в экранированный строковый литерал
- wordwrap очень длинная строка
- Начальная емкость ArrayList и IndexOutOfBoundsException
- Java-Извлечение части строки между двумя специальными символами
- Почему метод concat () Java не делает ничего?
Я не верю, что есть что-то встроенное для этого (это относительно необычно). Это должно сделать это, хотя:
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
и все должно быть в порядке.
Основываясь на подходе Фараза, я думаю, что преобразование символов может быть таким простым, как:
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); } }
в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); } }
порядке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); } }
Я действительно понимаю, что данный stream очень старый, но есть лучший способ его решения:
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); } }