Это 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: напрямую с помощью Stream
Collectors.joining
реализовать - цикл for (в этом сценарии логика цикла for обычно включает не только конкатенацию строк, но и другую бизнес-логику): выполнение непосредственно в цикле
stringJoiner.add()
Добавить к
Для версий jdk1.8 и выше рекомендуется использовать упомянутый выше StringJoiner для реализации сплайсинга строк; что касается jdk1.8, то хорошим выбором будет Guava, да и поза использования тоже очень проста
Серия блогов
- Практические советы 1. Замена заполнителя строки — версия JDK
- Практические советы 2: Перенос массивов и списков
- Практические советы 3: Обмен между строками и контейнерами
II. Другое
1. Серый блог:liuyueyi.github.io/hexblog
Серый личный блог, записывающий все посты блога по учебе и работе, приглашаю всех в гости
2. Заявление
Это не так хорошо, как письмо. Вышеупомянутое содержание чисто из семьи. Из-за ограниченных личных способностей неизбежно будут упущения и ошибки. Если вы обнаружите ошибки или у вас есть лучшие предложения, вы можете критиковать и поправьте их.
- Адрес вейбо:Блог Маленького Серого
- QQ: серо-серый / 3302797840
- Публичный аккаунт WeChat:серый блог