Страницы

Поиск по вопросам

вторник, 10 декабря 2019 г.

Возможно ли в тернарном операторе произвести зависимое от переменной умножение символов

#java


Возможно ли как то упростить код метода:

        public String say() {
            if(i<=0) return name +" спит.";
            else {
                StringBuilder sb = new StringBuilder();
                for (int j = 0; j < i; j++) {
                    sb.append("я");
                }
                return name + " говорит м"+sb+"у!";
            }
        }


До типа такого:

        public String say() {
            return i<=0?name+" спит.":name + " говорит м"+'я'*i+"у!";
        }


Я понимаю, что 'я'*i не правильно. Это образный пример.
    


Ответы

Ответ 1



Вот так, без лишних методов и повторов переменных. public String sayOrSleep(int i, String name) { return name + ((i<=0) ? " спит." : " говорит м"+ String.format("%0" + i + "d", 0).replace("0","я")+"у!"); } Зачем писать костыль, когда уже все написано до Вас для подобных случаев :)

Ответ 2



public String say() { return i <= 0 ? name + " спит." : name + " говорит м" + multiplyCharYa(i) + "у!"; } public String multiplyCharYa(int i){ StringBuilder sb = new StringBuilder(); for (int j = 0; j < i; j++) { sb.append("я"); } return sb.toString(); }

Ответ 3



С использование Java 8 можно воспользоваться комбинацией Collections.nCopies и методом String.join public String sayOrSleep() { return name + (i <= 0 ? " спит." : " говорит м" + String.join("", Collections.nCopies(i, "я")) + "у!"); } Еще вариант с использованием Collectors.joining public String sayOrSleep() { return name + (i <= 0 ? " спит." : " говорит м" + Collections.nCopies(i, "я").stream().collect(Collectors.joining("")) + "у!"); }

Комментариев нет:

Отправить комментарий