Объединение строк в Java

1. Введение

Java предоставляет значительное количество методов и классов, предназначенных для объединения строк.

В этом руководстве мы углубимся в некоторые из них, а также обозначим некоторые распространенные ошибки и плохие практики.

2. StringBuilder

Прежде всего, это скромный StringBuilder. Этот класс предоставляет широкий спектр string- инженерных систем зданий , что облегчает работу струнной манипуляции.

Давайте создадим быстрый пример струнной конкатенации с помощью StringBuilder класса:

StringBuilder stringBuilder = new StringBuilder(100); stringBuilder.append("Baeldung"); stringBuilder.append(" is"); stringBuilder.append(" awesome"); assertEquals("Baeldung is awesome", stringBuilder.toString());

Внутри StringBuilder поддерживает изменяемый массив символов. В нашем примере кода мы объявили, что его начальный размер равен 100 с помощью конструктора StringBuilder . Из-за этого объявления размера StringBuilder может быть очень эффективным способом объединения строк .

Также стоит отметить, что класс StringBuffer является синхронизированной версией StringBuilder .

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

3. Оператор сложения

Далее идет оператор сложения (+). Это тот же оператор, который приводит к сложению чисел и перегружается для объединения при применении к строкам.

Давайте быстро посмотрим, как это работает:

String myString = "The " + "quick " + "brown " + "fox..."; assertEquals("The quick brown fox...", myString);

На первый взгляд это может показаться намного более лаконичным, чем вариант StringBuilder . Однако при компиляции исходного кода символ + преобразуется в цепочки вызовов StringBuilder.append () . Из-за этого смешивание методов конкатенации StringBuilder и + считается плохой практикой .

Кроме того, строка конкатенации с помощью оператора + в цикле следует избегать. Поскольку объект String неизменяем, каждый вызов конкатенации приведет к созданию нового объекта String .

4. Строковые методы

Сам класс String предоставляет целый ряд методов для объединения строк.

4.1. String.concat

Неудивительно, что метод String.concat - это наш первый порт вызова при попытке объединить объекты String . Этот метод возвращает объект String , поэтому объединение методов в цепочку является полезной функцией.

String myString = "Both".concat(" fickle") .concat(" dwarves") .concat(" jinx") .concat(" my") .concat(" pig") .concat(" quiz"); assertEquals("Both fickle dwarves jinx my pig quiz", myString);

В этом примере наша цепочка начинается со строкового литерала, затем метод concat позволяет нам связывать вызовы для добавления дополнительных строк .

4.2. String.format

Далее идет метод String.format , который позволяет нам внедрять различные объекты Java в шаблон String .

String.Format метод подпись принимает единственную строку , обозначающую наш шаблон . Этот шаблон содержит символы '%' для обозначения того, где находятся различные объекты.должны быть помещены в него.

После того, как наш шаблон объявлен, он принимает массив объектов varargs, который вводится в шаблон.

Давайте посмотрим, как это работает, на небольшом примере:

String myString = String.format("%s %s %.2f %s %s, %s...", "I", "ate", 2.5056302, "blueberry", "pies", "oops"); assertEquals("I ate 2.51 blueberry pies, oops...", myString);

Как мы видим выше, метод ввел наши строки в правильный формат.

4.3. String.join (Java 8+)

Если наше приложение работает на Java 8 или выше , мы можем воспользоваться методом String.join . Благодаря этому мы можем объединить массив строк с общим разделителем , чтобы не пропустить ни одного пробела.

String[] strings = {"I'm", "running", "out", "of", "pangrams!"}; String myString = String.join(" ", strings); assertEquals("I'm running out of pangrams!", myString); 

Огромным преимуществом этого метода является отсутствие необходимости беспокоиться о разделителе между нашими строками.

5. StringJoiner (Java 8+)

StringJoiner абстрагирует все функции String.join в простой в использовании класс. Конструктор принимает разделитель, с необязательным префиксом и суффиксом . Мы можем добавлять строки, используя хорошо названный метод добавления .

StringJoiner fruitJoiner = new StringJoiner(", "); fruitJoiner.add("Apples"); fruitJoiner.add("Oranges"); fruitJoiner.add("Bananas"); assertEquals("Apples, Oranges, Bananas", fruitJoiner.toString());

Используя этот класс вместо метода String.join , мы можем добавлять строки по мере выполнения программы ; Нет необходимости сначала создавать массив!

Прочтите нашу статью о StringJoiner для получения дополнительной информации и примеров.

6. Arrays.toString

Что касается массивов, класс Array также содержит удобный метод toString, который красиво форматирует массив объектов. В Массивы. Метод toString также вызывает метод toString любого закрытого объекта, поэтому нам нужно убедиться, что он определен.

String[] myFavouriteLanguages = {"Java", "JavaScript", "Python"}; String toString = Arrays.toString(myFavouriteLanguages); assertEquals("[Java, JavaScript, Python]", toString);

К сожалению, файл Arrays. toString не настраивается и выводит только строку, заключенную в квадратные скобки.

7. Collectors.joining (Java 8+)

Наконец, давайте взглянем на метод Collectors.joining, который позволяет нам направлять вывод Stream в одну строку.

List awesomeAnimals = Arrays.asList("Shark", "Panda", "Armadillo"); String animalString = awesomeAnimals.stream().collect(Collectors.joining(", ")); assertEquals("Shark, Panda, Armadillo", animalString);

Использование потоков открывает все функции, связанные с Java 8 Stream API, такие как фильтрация, отображение, итерация и многое другое.

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

В этой статье мы подробно рассмотрели множество классов и методов, используемых для объединения строк.на языке Java.

Как всегда, исходный код доступен на GitHub.