Проблема: когда мы выводим что-то через цикл и добавляем разделители (запятые, пробелы, дефисы),
после последнего элемента всегда остаётся лишний символ.
Решение: есть два способа — добавить разделитель до или после элемента, а потом убрать последний.
Эту тему я буду повторять, пока не запомню навсегда!
Когда мы собираем строку из элементов массива с разделителем:
String result = "";
for (int i = 0; i < arr.length; i++) {
result += arr[i] + ", "; // после последнего элемента тоже будет ", "
}Получается:
1, 2, 3, 4, 5, ← лишняя запятая в конце
Это некрасиво. Нужно её убрать.
Идея: добавляем запятую перед элементом, начиная со второго.
int[] arr = {1, 2, 3, 4, 5};
String result = "";
for (int i = 0; i < arr.length; i++) {
if (i > 0) {
result += ", "; // перед каждым элементом, кроме первого
}
result += arr[i];
}
System.out.println(result); // 1, 2, 3, 4, 5Или наоборот — проверяем, не последний ли элемент, и добавляем разделитель после:
for (int i = 0; i < arr.length; i++) {
result += arr[i];
if (i < arr.length - 1) {
result += ", "; // после каждого, кроме последнего
}
}
System.out.println(result); // 1, 2, 3, 4, 5Вывод:
1, 2, 3, 4, 5
i < arr.length - 1— проверяет, что это не последний элемент- Этот способ самый понятный и безопасный
- Не требует дополнительной обрезки
Идея: сначала собираем всё с разделителями, потом обрезаем последний символ.
int[] arr = {1, 2, 3, 4, 5};
String result = "";
for (int i = 0; i < arr.length; i++) {
result += arr[i] + ", ";
}
// result = "1, 2, 3, 4, 5, "
result = result.substring(0, result.length() - 2); // убираем ", "
System.out.println(result); // 1, 2, 3, 4, 5Вывод:
1, 2, 3, 4, 5
- substring(0, result.length() - 2) — убираем последние 2 символа (запятую и пробел)
- Если разделитель — просто запятая "," — убираем 1 символ
- Если разделитель — дефис "-" — убираем 1 символ
Пример с дефисом (для вывода слов через дефис)
String[] words = {"Hello", "World", "Java"};
String result = "";
for (int i = 0; i < words.length; i++) {
result += words[i];
if (i < words.length - 1) {
result += "-";
}
}
System.out.println(result); // Hello-World-JavaString[] words = {"Hello", "World", "Java"};
String result = "";
for (int i = 0; i < words.length; i++) {
result += words[i] + "-";
}
result = result.substring(0, result.length() - 1);
System.out.println(result); // Hello-World-Java- Лишний разделитель в конце — это нормально, все через это проходят
- Способ 1 (проверка): if (i < arr.length - 1) — добавляем разделитель после каждого, кроме последнего
- Способ 2 (обрезка): substring(0, result.length() - 1) — добавляем всё, потом убираем последний символ
- Для способа 2 нужно точно знать, сколько символов убирать:
", "— убираем 2 символа","— убираем 1 символ" - "— убираем 3 символа
// Добавляем разделитель после каждого элемента, кроме последнего
if (i < arr.length - 1) {
result += ", ";
}Или коротко:
result = result.substring(0, result.length() - 1);⭐ Теперь я точно запомню этот приём и не буду мучиться с лишней запятой в конце!