1. Обзор
В этом кратком руководстве мы рассмотрим различные способы преобразования массива символов в строку
в Java.
2. Конструктор строк
Класс String
имеет конструктор, который принимает массив символов
в качестве аргумента:
@Test
public void whenStringConstructor_thenOK() {
final char[] charArray = { 'b', 'a', 'e', 'l', 'd', 'u', 'n', 'g' };
String string = new String(charArray);
assertThat(string, is("foreach"));
}
Это один из самых простых способов преобразования массива символов в
строку
. Он внутренне вызывает String#valueOf
для создания объекта String .
3. Строка.значение()
Говоря о valueOf(),
мы можем использовать его даже напрямую:
@Test
public void whenStringValueOf_thenOK() {
final char[] charArray = { 'b', 'a', 'e', 'l', 'd', 'u', 'n', 'g' };
String string = String.valueOf(charArray);
assertThat(string, is("foreach"));
}
String#copyValueOf
— это еще один метод, который семантически эквивалентен методу valueOf()
, но имел какое-либо значение только в первых нескольких выпусках Java. На сегодняшний день метод copyValueOf()
является избыточным, и мы не рекомендуем его использовать.
4. StringBuilder
toString ()
Что, если мы хотим сформировать строку
из массива массивов символов
?
Затем мы можем сначала создать экземпляр StringBuilder
и использовать его метод append(char[]) для объединения всего содержимого.
Позже мы воспользуемся методом toString()
, чтобы получить строковое
представление:
@Test
public void whenStringBuilder_thenOK() {
final char[][] arrayOfCharArray = { { 'b', 'a' }, { 'e', 'l', 'd', 'u' }, { 'n', 'g' } };
StringBuilder sb = new StringBuilder();
for (char[] subArray : arrayOfCharArray) {
sb.append(subArray);
}
assertThat(sb.toString(), is("foreach"));
}
Мы можем дополнительно оптимизировать приведенный выше код, создав экземпляр StringBuilder
точной длины, которая нам нужна.
5. Потоки Java 8
С помощью метода Arrays.stream(T[] object)
мы можем открыть поток над массивом типа T
.
Учитывая, что у нас есть массив символов ,
мы можем использовать операцию Collectors.joining()
для формирования экземпляра строки :
@Test
public void whenStreamCollectors_thenOK() {
final Character[] charArray = { 'b', 'a', 'e', 'l', 'd', 'u', 'n', 'g' };
Stream<Character> charStream = Arrays.stream(charArray);
String string = charStream.map(String::valueOf).collect(Collectors.joining());
assertThat(string, is("foreach"));
}
Недостаток этого подхода заключается в том, что мы вызываем valueOf()
для каждого элемента Character
, поэтому это будет довольно медленно.
6. Соединитель общей базы гуавы
Предположим, что строка, которую нам нужно создать, является строкой с разделителями. Гуава дает нам удобный метод:
@Test
public void whenGuavaCommonBaseJoiners_thenOK() {
final Character[] charArray = { 'b', 'a', 'e', 'l', 'd', 'u', 'n', 'g' };
String string = Joiner.on("|").join(charArray);
assertThat(string, is("b|a|e|l|d|u|n|g"));
}
Опять же, обратите внимание, что метод join()
будет принимать только массив символов
, а не примитивный массив символов .
7. Заключение
В этом руководстве мы рассмотрели способы преобразования заданного массива символов в его строковое
представление в Java.
Как обычно, все примеры кода можно найти на GitHub .