Преобразувания на масив в низ

1. Общ преглед

В този кратък урок ще разгледаме преобразуването на масив от низове или цели числа в низ и обратно.

Можем да постигнем това с ванилни Java и Java помощни класове от често използвани библиотеки.

2. Преобразуване на масив в низ

Понякога трябва да преобразуваме масив от низове или цели числа в низ, но за съжаление няма директен метод за извършване на това преобразуване.

Изпълнението по подразбиране на метода toString () за масив връща нещо като Ljava.lang.String; @ 74a10858, което ни информира само за типа на обекта и хеш кода.

Въпреки това, java.util.Arrays полезност опори клас масив и манипулация низ, включително ToString () метод за масиви.

Arrays.toString () връща низ със съдържанието на входния масив. Създаденият нов низ е списък на елементите на масива, разделен със запетая, заобиколен от квадратни скоби (“[]”):

String[] strArray = { "one", "two", "three" }; String joinedString = Arrays.toString(strArray); assertEquals("[one, two, three]", joinedString);
int[] intArray = { 1,2,3,4,5 }; joinedString = Arrays.toString(intArray); assertEquals("[1, 2, 3, 4, 5]", joinedString);

И макар да е страхотно, че методът Arrays.toString (int []) изпълнява тази задача толкова добре за нас, нека я сравним с различни методи, които можем да приложим сами.

2.1. StringBuilder.append ()

За начало нека разгледаме как да направим това преобразуване със StringBuilder.append () :

String[] strArray = { "Convert", "Array", "With", "Java" }; StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < strArray.length; i++) { stringBuilder.append(strArray[i]); } String joinedString = stringBuilder.toString(); assertEquals("ConvertArrayWithJava", joinedString);

Освен това, за да преобразуваме масив от цели числа, можем да използваме същия подход, но вместо това да извикаме Integer.valueOf (intArray [i]), когато добавяме към нашия StringBuilder .

2.2. API на Java Streams

Java 8 и по-нови предлага метод String.join () , който създава нов низ чрез обединяване на елементи и разделянето им с посочения разделител, в нашия случай просто празен низ:

String joinedString = String.join("", new String[]{ "Convert", "With", "Java", "Streams" }); assertEquals("ConvertWithJavaStreams", joinedString);

Освен това можем да използваме метода Collectors.joining () от API на Java Streams, който обединява низове от Stream в същия ред като неговия масив източник:

String joinedString = Arrays .stream(new String[]{ "Convert", "With", "Java", "Streams" }) .collect(Collectors.joining()); assertEquals("ConvertWithJavaStreams", joinedString);

2.3. StringUtils.join ()

И Apache Commons Lang никога не трябва да бъде пропускан от задачи като тези.

Класът StringUtils има няколко метода StringUtils.join () , които могат да се използват за промяна на масив от низове в един низ:

String joinedString = StringUtils.join(new String[]{ "Convert", "With", "Apache", "Commons" }); assertEquals("ConvertWithApacheCommons", joinedString);

2.4. Joiner.join ()

И за да не се надминава, Гуава побира същото със своя клас Joiner . Класът Joiner предлага плавен API и предоставя няколко помощни метода за присъединяване на данни.

Например можем да добавим разделител или да пропуснем нулеви стойности:

String joinedString = Joiner.on("") .skipNulls() .join(new String[]{ "Convert", "With", "Guava", null }); assertEquals("ConvertWithGuava", joinedString);

3. Преобразуване на String в масив от низове

По подобен начин, понякога трябва да разделим низ в масив, който съдържа някаква подмножина на входния низ, разделена от посочения разделител, нека видим как можем да направим и това.

3.1. String.split ()

Първо, нека започнем с разделяне на празното пространство чрез метода String.split () без разделител:

String[] strArray = "loremipsum".split("");

Което произвежда:

["l", "o", "r", "e", "m", "i", "p", "s", "u", "m"]

3.2. StringUtils.split ()

На второ място, нека да разгледаме отново класа StringUtils от библиотеката Commons Lang на Apache.

Сред много безопасни методи за низови обекти можем да намерим StringUtils.split (). По подразбиране той приема разделител на празно пространство:

String[] splitted = StringUtils.split("lorem ipsum dolor sit amet");

Което води до:

["lorem", "ipsum", "dolor", "sit", "amet"]

Но можем да осигурим и разделител, ако искаме.

3.3. Splitter.split ()

И накрая, можем да използваме и Guava с неговия API за свободно използване на Splitter :

List resultList = Splitter.on(' ') .trimResults() .omitEmptyStrings() .splitToList("lorem ipsum dolor sit amet"); String[] strArray = resultList.toArray(new String[0]);

Кое генерира:

["lorem", "ipsum", "dolor", "sit", "amet"]

4. Заключение

В тази статия илюстрирахме как да преобразуваме масив в низ и обратно, използвайки основната Java и популярните библиотеки за помощни програми.

Разбира се, изпълнението на всички тези примери и кодови фрагменти може да бъде намерено в GitHub.