Класс StringHelper

  • 5
  • Недоступна
Мы любим статические методы, они делают недоступное доступным. Хотя порой и наоборот… Но в этой задаче мы их любим: нам необходимо создать класс StringHelper, у которого будут 2 статических метода. Это multiply(String s, int count) – возвращает строку, повторенную count раз и multiply(String s) – возвращает строку, повторенную 5 раз.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (136)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Алексей9 уровень, Москва
13 февраля, 10:41
Всем привет. Подскажите, как решить эту задачу через метод StringUtils.repeat() ???
Alexey Ermakov11 уровень, Санкт-Петербург
12 февраля, 16:02
https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/String.html#repeat(int) Обновите версию jvm на сервере, пожалуйста :)
Peter18 уровень, Москва
3 февраля, 10:16
С этой задачкой надо кое-что прояснить. У вас IDE предупреждает о конкатенации строк в цикле? Должен предупреждать. Дело в том, что в Java конкатенация строк -- это затратная операция. Когда вы пишите
s = s  + "какая-то строка"
, на самом деле вы не добавляете строку в кавычках в конец переменной s. Джава создает новую переменную, помещает результат слияния строк в нее и присваивает ссылку на эту новую переменную нашей s. И так для каждой конкатенации! Если вы делаете конкатенацию строк в цикле, то ваш цикл занимается тем, что создает, и создает, и создает новые строки. Они, конечно, будут подобраны сборщиком мусора, но это все весьма затратно. Происходит такая бяка потому что класс String в джаве иммутабельный. То есть, строка, будучи однажды создана, уже никогда не может быть изменена. Это имеет свои плюсы, но и минусы тоже - все методы, которые что-то делают со строками, на самом деле не меняют строки, а создают новые и помещают в них результат своей работы. Конкатенация строк при помощи операторов + или += на самом деле разворачивается примерно вот в такое
String s1 = "конкатенация ";
String s2 = "строк";

// наша конкатенация
String result = s1+ s2;

// на самом деле делается вот так
String result = new StringBuilder()).append(s1).append(s2).toString();
Артём Кравченко9 уровень, Таганрог
27 января, 17:14
Некоторое время не мог понять, что именно нужно в теле цикла написать, а потом дошло, что нужно склеивать строки
Cyclone C9 уровень, Москва
23 января, 15:58
Ребята, когда будете решать обратите внимание, что переменной result нужно присвоить значение переменной s. Разработчики, плз, 99% геморроя с этой задачей - это понимание ее описания, добавьте описание плз.
Vladimir7 уровень, Kiev
3 января, 16:18
Понравилась задача. Очень добрая и лайтовая. Как раз по материалу, который проходили. Но я споткнулся на:
result += s;
Прибавлял "result" к "result". У меня вопрос к знатокам, чем занимаются эти две строчки?
public static String multiply(String s) {
    String result = "";
Зачем инициализировать "result" двумя ковычками, нельзя ли написать просто:
String result;
Badger14 уровень, Киев
3 января, 19:56
По поводу двух строчек: как ты заметил - это инициализация, и т.к. у нас строковая переменная и предварительно в ней ничего хранить не нужно, то записываем туда "ничего" в кавычках; а если ее не инициализировать, то на этапе компиляции получишь исключение, что переменная не инициализирована. Почему? Потому, что локальные переменные не имеют значения по умолчанию. Локальными переменными являются переменные в методах или блоке кода.
Vladimir7 уровень, Kiev
4 января, 12:05
Отличный ответ, спасибо. Теперь все понятно
9 января, 13:11
Vladimir, вы очень помогли своим комментарием, сначала написал
result += result;
Но после вашего комментария вспомнил что сначала result ничего в себе не хранит.СПАСИБО!!😅
Vladimir7 уровень, Kiev
9 января, 15:12
Всегда пожалауйста) Приятно читать такие комментарии) Лайтового кодинга вам
11 января, 14:34
Спасибо))))
Art10 уровень, Москва
12 февраля, 18:35
По идее от нас ждут объявления result = s; вместо result = ""; и дальше в цикле нужное количество присвоений.
Vladimir7 уровень, Kiev
19 февраля, 08:35
Art, странно, кавычки больше на подсказку похожи, чем на код, который нужно исправить
Ilyas Badavi9 уровень, Казань
30 декабря 2019, 07:19
моя ошибка была в том что цикл создал первым полем, а не после поля String;
Badger14 уровень, Киев
24 декабря 2019, 20:53
Я понимаю, что решение выкладывать не хорошо, но думаю нестандартный способ показать можно. Сам я например чаще только за этим и захожу в обсуждение задачи, уже после ее решения.
1. String.format("%5s", " ").replace(" ", s);
2. String.format("%" + count + "s", " ").replace(" ", s);
Ilyas Badavi9 уровень, Казань
30 декабря 2019, 07:20
паря, это мы точно не проходили
Василий Бабин14 уровень, Москва
2 января, 16:57
Мое мнение, наоборот. Читать чужой код как раз и полезно. Но после, конечно, как сам решил.
Vladimir7 уровень, Kiev
3 января, 16:10
Что это? Мы такое не проходили
Дмитрий16 уровень, Москва
19 декабря 2019, 15:39
Почему здесь нужно указывать в цикле:
result += s;
а не:
rusult += result;
В принципе пока вопрос писал, понял, что в String s мы получаем некое входящее слово и используем уже конкатенацию с "" Это верно?
Ilyas Badavi9 уровень, Казань
30 декабря 2019, 07:21
result изначально ничему не равен, поэтому ты постоянно будешь ничего прибавлять к ничему,
Liliya Ryabova18 уровень, Москва
19 декабря 2019, 06:15
Вызов методов из main, цикл < ,а не <=, параметры в методе, а не с клавиатуры.