1. Огляд
У цьому короткому посібнику ми розглянемо різні способи перетворення масиву символів у рядок на Java.
2. Конструктор рядків
Клас String має конструктор, який приймає масив char як аргумент:
@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")); }
Рядок # copyValueOf - це ще один метод, який семантично еквівалентний методу valueOf (), але мав будь-яке значення лише в перших кількох випусках Java. На сьогоднішній день, copyValueOf () метод є надмірною , і ми не рекомендуємо використовувати його.
4. StringBuilder 's toString ()
Що робити, якщо ми хочемо сформувати рядок із масиву масивів char ?
Потім ми можемо спочатку створити екземпляр екземпляра StringBuilder і використовувати його метод append (char []) для додавання всього вмісту разом.
Пізніше ми використаємо метод toString (), щоб отримати його подання String :
@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
З (об'єкта T []) Arrays.stream методу, ми можемо відкрити потік над масивом типу T .
Враховуючи, що у нас є масив символів , ми можемо використовувати операцію Collectors.joining () для формування екземпляра рядка :
@Test public void whenStreamCollectors_thenOK() { final Character[] charArray = { 'b', 'a', 'e', 'l', 'd', 'u', 'n', 'g' }; Stream charStream = Arrays.stream(charArray); String string = charStream.map(String::valueOf).collect(Collectors.joining()); assertThat(string, is("baeldung")); }
Застереження при такому підході полягає в тому, що ми викликаємо valueOf () над кожним елементом Character, і тому це буде досить повільно.
6. Гуава Common Base Joiner
Припустимо, що рядок, який нам потрібно створити, є роздільником. Гуава дає нам зручний метод:
@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")); }
Знову ж , зверніть увагу , що приєднатися () метод буде приймати тільки Character масив , а не примітивний символ масиву.
7. Висновок
У цьому навчальному посібнику ми дослідили способи перетворення заданого масиву символів у його подання String у Java.
Як завжди, усі приклади коду можна знайти на GitHub.