Рубрики
Без рубрики

Объединение Строк В Java

Изучите различные способы объединения строк в Java

Автор оригинала: Sam Millington.

1. введение

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

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

2. StringBuilder

Во-первых, это скромный StringBuilder. Этот класс предоставляет массив утилит String- building , которые облегчают работу с String манипуляциями.

Давайте построим быстрый пример 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 builder. В то время как отдельные вызовы синхронизированного метода являются потокобезопасными, несколько вызовов не являются .

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

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

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

String myString = "The " + "quick " + "brown " + "fox...";

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

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

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

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

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

4.1. Строка.Конкат

Неудивительно, что метод 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);

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

4.2. Строка.формат

Далее следует метод 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. Строка.присоединиться (Java 8+)

Если наше приложение работает на Java 8 или выше , мы можем воспользоваться строкой .метод 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 абстрагирует всю строку .объедините функциональность в простой в использовании класс. Конструктор принимает разделитель с необязательным префиксом и суффиксом . Мы можем добавить Строки , используя хорошо названный метод add .

StringJoiner fruitJoiner = new StringJoiner(", ");

fruitJoiner.add("Apples");
fruitJoiner.add("Oranges");
fruitJoiner.add("Bananas");

assertEquals("Apples, Oranges, Bananas", fruitJoiner.toString());

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

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

6. Массивы.toString

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

String[] myFavouriteLanguages = {"Java", "JavaScript", "Python"};

String toString = Arrays.toString(myFavouriteLanguages);

assertEquals("[Java, JavaScript, Python]", toString);

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

7. Сборщики.присоединение (Java 8+)

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

List awesomeAnimals = Arrays.asList("Shark", "Panda", "Armadillo");

String animalString = awesomeAnimals.stream().collect(Collectors.joining(", "));

assertEquals("Shark, Panda, Armadillo", animalString);

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

8. Заверните

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

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