«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("baeldung"));
}

Это один из самых простых способов преобразования массива символов в строку. Он внутренне вызывает String#valueOf для создания объекта String.

3. String.valueOf()

Говоря о 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("baeldung"));
}

String#copyValueOf — еще один метод, который семантически эквивалентен методу valueOf(), но был какое-либо значение только в первых нескольких выпусках Java. На сегодняшний день метод copyValueOf() является избыточным, и мы не рекомендуем его использовать.

4. Метод toString() в StringBuilder

Что делать, если мы хотим сформировать строку из массива массивов символов?

Затем мы можем сначала создать экземпляр 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("baeldung"));
}

Мы можем еще больше оптимизировать приведенный выше код, создав экземпляр StringBuilder точной длины, которая нам нужна.

5. Потоки Java 8

С помощью метода Arrays.stream(T[] object) мы можем открыть поток над массивом типа T.

Учитывая, что у нас есть массив символов, мы можем использовать коллекторы Операция .joining() для формирования экземпляра String:

@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("baeldung"));
}

Недостаток этого подхода заключается в том, что мы вызываем valueOf() для каждого элемента Character, поэтому это будет довольно медленно.

6. Guava Common Base Joiner

Предположим, что строка, которую нам нужно создать, является строкой с разделителями. Guava дает нам удобный метод:

@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.