Как превратить строку в массив символов и обратно
Короткий ответ
toCharArray() даёт массив символов, а new String(array) или String.valueOf(array) собирает строку обратно:
void main() {
char[] letters = "java".toCharArray();
letters[0] = 'J';
IO.println(letters.length);
IO.println(new String(letters));
}Результат:
4
JavaОтсортировать буквы
С массивом можно делать то, чего нельзя со строкой, например сортировать. Так проверяют анаграммы:
String sorted(String word) {
char[] chars = word.toCharArray();
Arrays.sort(chars);
return new String(chars);
}
void main() {
IO.println(sorted("listen"));
IO.println(sorted("listen").equals(sorted("silent")));
}Результат:
eilnst
trueПеребор без массива
Чтобы просто пройти по символам, массив не нужен — используйте charAt() или chars():
void main() {
String word = "abc";
word.chars().forEach(c -> IO.println((char) c + " = " + c));
}Результат:
a = 97
b = 98
c = 99Список символов
Иногда удобнее List<Character>:
void main() {
List<Character> chars = "hello".chars().mapToObj(c -> (char) c).toList();
IO.println(chars);
}Результат:
[h, e, l, l, o]Частая ошибка
Напечатать массив через toString(). Для char[] печать через IO.println() работает, но склейка со строкой выводит адрес объекта:
void main() {
char[] letters = {'h', 'i'};
IO.println("Letters: " + letters);
IO.println("Letters: " + Arrays.toString(letters));
}Результат:
Letters: [C@2df32bf7
Letters: [h, i]Первая строка у вас будет другой — после [C@ идёт случайный хеш-код. Используйте Arrays.toString() или new String(letters).
Функции из этого ответа
- String.toCharArray() — Копирует символы строки в новый массив char[].
- String.chars() — Возвращает поток кодов символов строки.
- String.valueOf() — Превращает значение любого типа в строку.
- String.charAt() — Возвращает символ строки по индексу.