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")); }
Това е един от най-лесните начини за преобразуване на масив char в низ . Той вътрешно извиква 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. StringBuilder 's toString ()
Ами ако искаме да формираме String от масив от масиви 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 метод, ние можем да открие поток през масив от тип Т .
Като се има предвид, че имаме масив от символи , можем да използваме операцията Collectors.joining () , за да формираме екземпляр String :
@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. Дърводелец от Guava Common Base
Да кажем обаче, че низът, който трябва да създадем, е низ с разделители. 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")); }
Отново, имайте предвид, че на присъединят () метод ще приема само Character масив, а не примитивно Чар масив.
7. Заключение
В този урок проучихме начините за преобразуване на даден масив от символи в неговото представяне на String в Java.
Както обикновено, всички примери за код могат да бъдат намерени в GitHub.