Практические советы 4. Элегантная реализация конкатенации строк

Java задняя часть

Это 12-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления

Практические советы 4. Элегантная реализация конкатенации строк

Практический трюк каждый день,字符串拼接

Я считаю, что ни один мелкий партнер не написал такой код.Например, давайте реализуем сцену сращивания строк.Какая реализация элегантна?

Возьмите преобразование массива int в строку с разделителями-запятыми в качестве примера, чтобы продемонстрировать

1. Обычное письмо

Используйте StringBuilder напрямую для сращивания

public String join(List<Integer> list) {
    StringBuilder builder = new StringBuilder();
    for(Integer sub: list) {
        builder.append(sub).append(",");
    }
    return builder.substring(0, builder.length() - 1);
}

Вышеприведенный способ написания считается более распространенным.Относительно неприятное место — это последнее toString, а последнюю английскую запятую нужно убрать.

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

public String join2(List<Integer> list) {
    StringBuilder builder = new StringBuilder();
    boolean first = true;
    for (Integer sub: list) {
        if (first) {
            first = false;
        } else {
            builder.append(",");
        }
        builder.append(sub);
    }
    return builder.toString();
}

2. StringJoiner

В приведенной выше реализации не очень элегантно убивать последний разделитель, так что есть ли лучшее использование?StringJoinerПуть

public String join3(List<Integer> list) {
    StringJoiner joiner = new StringJoiner(",");
    for (Integer s : list) {
        joiner.add(String.valueOf(s));
    }
    return joiner.toString();
}

StringJoiner предоставляется jdk1.8.В дополнение к описанному выше базовому игровому процессу в сочетании с методом потоковой операции, представленным в jdk1.8, он может быть реализован более лаконично.

return list.stream().map(String::valueOf).collect(Collectors.joining(","));

Как, вышеуказанная реализация более проста, чем предыдущий код, выполняется строка кода.

3. guava joiner

Если вы используете jdk не версии 1.8, вы не можете использовать вышеуказанный StringJoiner, это не имеет значения, и также можно реализовать Guava's Joiner

public String join5(List<Integer> list) {
    return Joiner.on(",").join(list);
}

Уведомление

  • Типы получаемых параметров: массив/Итерируемый/Итератор/переменные параметры, которые в основном могут охватывать наши повседневные бизнес-сценарии.

4. Резюме

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

В этой статье представлен очень полезный способStringJoiner, что полностью решает указанную выше проблему разделителя, и его использование имеет два сценария

  • Простой контейнер в String: напрямую с помощью StreamCollectors.joiningреализовать
  • цикл for (в этом сценарии логика цикла for обычно включает не только конкатенацию строк, но и другую бизнес-логику): выполнение непосредственно в циклеstringJoiner.add()Добавить к

Для версий jdk1.8 и выше рекомендуется использовать упомянутый выше StringJoiner для реализации сплайсинга строк; что касается jdk1.8, то хорошим выбором будет Guava, да и поза использования тоже очень проста

Серия блогов

II. Другое

1. Серый блог:liuyueyi.github.io/hexblog

Серый личный блог, записывающий все посты блога по учебе и работе, приглашаю всех в гости

2. Заявление

Это не так хорошо, как письмо. Вышеупомянутое содержание чисто из семьи. Из-за ограниченных личных способностей неизбежно будут упущения и ошибки. Если вы обнаружите ошибки или у вас есть лучшие предложения, вы можете критиковать и поправьте их.