1. Обзор
В этом коротком уроке мы рассмотрим преобразование массива строк или целых чисел в строку и обратно.
Мы можем достичь этого с помощью классов утилит vanilla Java и Java из часто используемых библиотек.
2. Преобразуйте массив в строку
Иногда нам нужно преобразовать массив строк или целых чисел в строку, но, к сожалению, прямого метода для выполнения этого преобразования не существует.
Реализация по умолчанию метода toString() в массиве возвращает что-то вроде Ljava.lang.Строка;@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
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 предлагает свободный 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("");
Который производит:
["l", "o", "r", "e", "m", "i", "p", "s", "u", "m"]
3.2. StringUtils.split()
Во-вторых, давайте еще раз посмотрим на класс StringUtils из библиотеки Commons Lang Apache.
Среди многих null-безопасных методов для строковых объектов мы можем найти StringUtils.split(). По умолчанию используется разделитель пробелов:
String[] splitted = StringUtils.split("lorem ipsum dolor sit amet");
Что приводит к:
["lorem", "ipsum", "dolor", "sit", "amet"]
Но мы также можем предоставить разделитель, если захотим.
3.3. Splitter.split()
Наконец, мы также можем использовать Guava с его Splitter fluent API:
ListresultList = 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 .