В конечном итоге Java 8 поставляется с классом StringJoiner в составе пакета java.util. Я не думаю, что реализация соединения строк сильно отличается от нашего подхода старой школы с использованием StringBuffer/StringBuilder. Мы увидим использование StringJoiner и его внутреннюю реализацию.
Например, у меня есть две строки «Smart» и «Techie», и я хочу объединить эти строки как [Smart,Techie]. В этом случае у меня есть префикс как «[», суффикс как «]» и разделитель как «,». StringJoiner имеет два конструктора, как показано ниже.
StringJoiner(CharSequence delimiter) StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
Мы хотим иметь префикс и суффикс, поэтому мы будем использовать второй конструктор для нашего примера.
StringJoiner sjr = new StringJoiner(",", "[", "]"); sjr.add("Smart").add("Techie"); System.out.println("The final Joined string is " + sjr);
Если мы не хотим иметь префикс и суффикс, то:
StringJoiner sjr1 = new StringJoiner(","); sjr1.add("Smart").add("Techie"); System.out.println("The final Joined string is " + sjr1);
Теперь мы увидим реализацию методов add и toString().
public StringJoiner add(CharSequence newElement) { prepareBuilder().append(newElement); return this; }
Реализация prepareBuilder() приведена ниже.
private StringBuilder prepareBuilder() { if (value != null) { value.append(delimiter); } else { value = new StringBuilder().append(prefix); } return value; }
Из приведенных выше реализаций видно, что StringJoiner следует подходу старой школы.
Реализация toString() приведена ниже.
public String toString() { if (value == null) { return emptyValue; } else { if (suffix.equals("")) { return value.toString(); } else { int initialLength = value.length(); String result = value.append(suffix).toString(); // reset value to pre-append initialLength value.setLength(initialLength); return result; } }
Удачного обучения!!!