Skip to content

Latest commit

 

History

History
151 lines (120 loc) · 5.11 KB

File metadata and controls

151 lines (120 loc) · 5.11 KB

Удаление последнего символа при выводе

Проблема: когда мы выводим что-то через цикл и добавляем разделители (запятые, пробелы, дефисы),
после последнего элемента всегда остаётся лишний символ.

Решение: есть два способа — добавить разделитель до или после элемента, а потом убрать последний.

Эту тему я буду повторять, пока не запомню навсегда!


Зачем это нужно?

Когда мы собираем строку из элементов массива с разделителем:

String result = "";
for (int i = 0; i < arr.length; i++) {
    result += arr[i] + ", ";  // после последнего элемента тоже будет ", "
}

Получается:

1, 2, 3, 4, 5, ← лишняя запятая в конце

Это некрасиво. Нужно её убрать.

Способ 1: проверка на последний элемент (самый понятный)

Идея: добавляем запятую перед элементом, начиная со второго.

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 — проверяет, что это не последний элемент
  • Этот способ самый понятный и безопасный
  • Не требует дополнительной обрезки

Способ 2: добавить всё, потом убрать последний символ

Идея: сначала собираем всё с разделителями, потом обрезаем последний символ.

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 символ

А если разделитель другой?

Пример с дефисом (для вывода слов через дефис)

Способ 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-Java

Способ 2 (обрезка):

String[] 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);

⭐ Теперь я точно запомню этот приём и не буду мучиться с лишней запятой в конце!