Java добавление отступа перед строкой BJP4 Упражнение 3.17: padString - PullRequest
0 голосов
/ 10 марта 2020
public class Practice {
    public static void main(String[] args) {
        System.out.println(padString("hi", 8));
    }

    public static String padString(String string, int length) {
        int wordLength = string.length();

        for (int space = 1; space <= length - wordLength; space++) {
             string = "." + string;
        }
        return string;
    }
}

Этот код работает так, как предполагается, но как? Вывод ...... привет (правильно), почему он не печатает .hi.hi.hi.hi.hi.hi (неправильно, но почему) Я в замешательстве, почему строка не печатается 6 раз хорошо? Период печатается 6 раз, но не "привет". Пожалуйста, кто-нибудь может объяснить это?

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

1) При первом выполнении l oop переменная string получает значение .hi

2) После первого раза l oop "объединяет" точку с .hi до последней итерации.

Целью оператора "+" является конкатенация, а не повторная вставка "hi"

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

0 голосов
/ 10 марта 2020

Поскольку string = "." + string; вставляет один . в начале string (оно не повторяется string). Фактически, ваш код может быть улучшен с помощью StringBuilder (что также может сделать это более понятным для вас). Мол,

public static String padString(String string, int length) {
    int count = length - string.length();
    StringBuilder sb = new StringBuilder(string);
    for (int space = 0; space < count; space++) {
        sb.insert(0, '.');
    }
    return sb.toString();
}
...