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

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

1. обзор

В этом коротком уроке мы рассмотрим преобразование массива строк или целых чисел в строку и обратно.

Мы можем добиться этого с помощью обычных Java и служебных классов Java из часто используемых библиотек.

2. Преобразовать массив в строку

Иногда нам нужно преобразовать массив строк или целых чисел в строку, но, к сожалению, прямого метода для этого преобразования не существует.

Реализация по умолчанию методаtoString() в массиве возвращает что-то вродеLjava.lang.String;@74a10858, которое только информирует нас о типе объекта и хэш-коде.

Однако служебный классjava.util.Arrays поддерживает манипуляции с массивами и строками, включая методtoString() для массивов.

Arrays.toString() returns a string with the content of the input array. Созданная новая строка представляет собой список элементов массива, разделенных запятыми и заключенный в квадратные скобки («[]»):

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]) when, добавляя его к нашему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() из Java Streams API, который объединяет строки из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()с

И чтобы не отставать,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.split() без разделителя:

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

Который производит:

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

3.2. StringUtils.split()с

Во-вторых, давайте еще раз посмотрим на классStringUtils из библиотеки Apache Commons Lang.

Среди многих безопасных для null методов для строковых объектов мы можем найтиStringUtils.split().. По умолчанию он предполагает разделитель пробелов:

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

Что приводит к:

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

Но мы также можем предоставить разделитель, если мы хотим.

3.3. Splitter.split()с

Наконец, мы также можем использоватьGuava с его текучим APISplitter:

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 и популярные служебные библиотеки.

Конечно, реализацию всех этих примеров и фрагментов кода можно найтиover on GitHub.