«1. Обзор
В этом коротком руководстве мы рассмотрим преобразование массива строк или целых чисел в строку и обратно.
Мы можем добиться этого с помощью vanilla 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()
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);
Для начала давайте посмотрим, как сделать это преобразование с помощью StringBuilder.append():
Кроме того, для преобразования массива целых чисел мы можем использовать тот же подход, но вместо этого вызвать Integer.valueOf(intArray[i]) при добавлении к нашему StringBuilder.
2.2. Java Streams API
String joinedString = String.join("", new String[]{ "Convert", "With", "Java", "Streams" });
assertEquals("ConvertWithJavaStreams", joinedString);
Java 8 и выше предлагает метод String.join(), который создает новую строку, объединяя элементы и разделяя их указанным разделителем, в нашем случае это просто пустая строка:
String joinedString = Arrays
.stream(new String[]{ "Convert", "With", "Java", "Streams" })
.collect(Collectors.joining());
assertEquals("ConvertWithJavaStreams", joinedString);
Кроме того, мы может использовать метод Collectors.joining() из Java Streams API, который объединяет строки из Stream в том же порядке, что и исходный массив:
2.3. StringUtils.join()
И Apache Commons Lang никогда не должен оставаться в стороне от таких задач.
String joinedString = StringUtils.join(new String[]{ "Convert", "With", "Apache", "Commons" });
assertEquals("ConvertWithApacheCommons", joinedString);
Класс StringUtils имеет несколько методов StringUtils.join(), которые можно использовать для преобразования массива строк в одну строку:
2.4. Joiner.join()
И чтобы не отставать, Guava приспосабливает то же самое к своему классу Joiner. Класс Joiner предлагает гибкий API и предоставляет несколько вспомогательных методов для объединения данных.
String joinedString = Joiner.on("")
.skipNulls()
.join(new String[]{ "Convert", "With", "Guava", null });
assertEquals("ConvertWithGuava", joinedString);
Например, мы можем добавить разделитель или пропустить нулевые значения:
3. Преобразовать строку в массив строк
Точно так же иногда нам нужно разбить строку на массив, содержащий некоторое подмножество строк. входная строка, разделенная указанным разделителем, давайте посмотрим, как мы можем это сделать.
3.1. String.split()
String[] strArray = "loremipsum".split("");
Во-первых, давайте начнем с разделения пробелов с помощью метода String.split() без разделителя:
["l", "o", "r", "e", "m", "i", "p", "s", "u", "m"]
Что дает:
3.2. StringUtils.split()
Во-вторых, давайте снова посмотрим на класс StringUtils из библиотеки Apache Commons Lang.
String[] splitted = StringUtils.split("lorem ipsum dolor sit amet");
Среди многих нулевых методов для строковых объектов мы можем найти StringUtils.split(). По умолчанию используется разделитель пробелов:
["lorem", "ipsum", "dolor", "sit", "amet"]
В результате получается:
Но мы также можем указать разделитель, если захотим.
3.3. Splitter.split()
List<String> resultList = Splitter.on(' ')
.trimResults()
.omitEmptyStrings()
.splitToList("lorem ipsum dolor sit amet");
String[] strArray = resultList.toArray(new String[0]);
Наконец, мы также можем использовать Guava с его плавным API Splitter:
["lorem", "ipsum", "dolor", "sit", "amet"]
Что генерирует:
4. Заключение
В этой статье мы показали, как преобразовать массив в строку и обратно, используя ядро Java и популярные служебные библиотеки.
Конечно, реализацию всех этих примеров и фрагментов кода можно найти на GitHub.