Омовение Рамы

  • 10
  • Недоступна
Когда-то жил и правил легендарный древнеиндийский царь Рама. И, вероятно, была та, которая его родила. Не факт, что она мыла его самостоятельно (царица всё-таки), но да простят нам знатоки эту невинную историческую фантазию. Напишем программу, которая заменит текст «мама мыла раму» на «Мама Мыла Раму».
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (621)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Viktor Zotov 10 уровень, Vologda
вчера, 05:47
Если буква одна, не надо её переводить в апперкейс
Ilyas Badavi 15 уровень, Казань
1 марта, 18:48
Задачу на ответ решил быстро, но валидатор как наверное и у многих не принимал последнее условие. Перерыл все комменты. Ответ тут, оказалось все очень интересно https://javarush.ru/groups/posts/645-stroki-v-java
Аскар 9 уровень, Москва
19 февраля, 13:19
Промучался пару часов с методами строк, потом плюнул, перевел строку в массив char, дальше в цикле находим первый символ слова и делаем Character.toUpperCase. Выводим на экран просто массив символов, валидатор проходит.
Pavel 9 уровень, Москва
17 февраля, 18:15
Какая то адовая задача. Принципиально не смотрел статьи с разборами и убил пол дня. В итоге сделал через split, но валидатор не принял решение. Было решено работать с исходной строкой с изменением ТОЛЬКО необходимых символов. Пробелы в начале, в конце и в середине были сохранены в результирующей строке.
//Цикл пробегает по строке и сохраняет индексы нужных символов.
for (int i = 0; i < string.length(); i++){
    //Сохраняет первый индекс если он не равен пробелу
    if (i == 0 && !Character.toString(string.charAt(i)).equals(" "))
        indexList.add(i);
    //Пропускает шаг если первый символ пробел
    else if (i == 0 && Character.toString(string.charAt(i)).equals(" "));
    //Сохраняет каждый поледующий индекс если предыдущий символ пробел
    else if (Character.toString(string.charAt(i-1)).equals(" ") && !Character.toString(string.charAt(i)).equals(" "))
        indexList.add(i);
}
Далее немного сократил код относительно того, по которому задача была сдана, но думаю тут валидатор уже не будет ругаться)
//Замена символов в строке
for (Integer i: indexList) {
        string = string.substring(0, i) + Character.toString(string.charAt(i)).toUpperCase(Locale.ROOT) + string.substring(i+1, string.length());
}
Ilyas Badavi 15 уровень, Казань
1 марта, 17:48
metod split в помощь
San4ous13 19 уровень
11 февраля, 18:21
Решал так:
public class Solution {
    public static void main(String[] args) throws IOException {
        /* Считываем строку с консоли и сразу убираем в ней пробелы в начале и в конце с помощью метода trim(),
        что является одним из условий задачи */
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String string = (reader.readLine()).trim();

        /* Создаем множество из строки так, чтобы каждое слово преобразовалось в элемент множества.
        Для этого используем метод split(), в параметрах которого указываем, что в качестве разделителя используем
        пробел. Знак "+" означает, что пробелов может быть больше одного, что нужно учитывать для решения задачи.
        */
        String [] split = string.split(" +");

        /*
        В цикле в каждом элементе с помощью методов substring() и toUpperCase() первую букву делаем заглавной.
        В substring() передается либо два, либо один аргумент: первый - индекс, с которого будет возвращаться
        строка (не включая). Второй - индекс, по который будет возвращаться строка (включая).
        substring(0, 1) - возвращает первую букву каждого элемента
        substring(1) - возвращает оставшуюся часть строки.
         */
        for (int i = 0; i < split.length; i++) {
            split[i] = split[i].substring(0, 1).toUpperCase() + split[i].substring(1);
        }

        // Объединяем обратно все элементы множества в строку, разделяя их пробелом и выводим результат.
        String result = (String.join(" ", split));
        System.out.println(result);
    }

}
Dmitry Galas 9 уровень, Минск
17 февраля, 04:45
валидация то прошла, потому что видимо идет сравнение с исходной string, но т.к. вы при инициализации удаляете пробелы, она уже не будет являться введенной с клавиатуры строки валидация то проходит, но по факту это не та строка, которая была введена
San4ous13 19 уровень
17 февраля, 20:51
Не понял, что вы имеете в виду. Я вообще сначала не проверял пробелы в начале, в конце и в середине, если их больше одного, но валидатор решение не пропускал, выдавая сообщения о том, что этих пробелов быть не должно. Переформулировав условие чуть подробнее, чем оно описано в задании, звучать оно будет примерно так: 1. Считать введенную строку. 2. Удалить в ней все пробелы по краям, а между словами оставить не больше одного. 3. В каждом слове первую букву сделать заглавной.
Igor 11 уровень, Минск
20 февраля, 19:02
Квинтэссенция костылей😁 А если нужно чтобы текст начинался с пробела? Уже лучше костыли сделать так для русских символов:
if (i == 0 && array[i] != 32) array[i] -= 32;
            else if(i != 0 && array[i] == 32) array[i + 1] -= 32;
Денис 10 уровень, Таганрог
7 февраля, 14:52
Почитайте вот эту статью https://javarush.ru/groups/posts/645-stroki-v-java про Character.
Евгений 20 уровень, Москва
6 февраля, 09:32
минус на задачку решил через сплит все выводится как надо, но валидатору чтото не нравится.. мы не учимся программировать мы учимся обходить валидатр))
Flexo Bending Unit #3370318
31 января, 07:51
вы будете смеяться, но сканер прошёл валидацию, хотя по сути исходную строку я поменял сильнее, чем требовалось: пробелы, например, лишние удалились
Scanner scanner = new Scanner(string);
String tmp = scanner.next();
String capitalized = tmp.substring(0, 1).toUpperCase(Locale.ROOT) + tmp.substring(1);
String result = capitalized;
while (scanner.hasNext()) {
    tmp = scanner.next();
    capitalized = tmp.substring(0, 1).toUpperCase(Locale.ROOT) + tmp.substring(1);
    result += " " + capitalized;
}
Myko Vendor в Silpo
30 января, 10:52
прикол! Уже ж вроде проходили подобную задачу на заглавные буквы... и вроде даже не так давно... и решил же относительно легко, но уже ничего не помню. Не пойму как так 🤔 что-то с toUpperCase() связано было.
Dmitry Panchenko 15 уровень, Москва
29 января, 11:09
Мне помогло: Метод trim() Разбиение строки на слова и символы в массив и по разделителю Посмотрев правильное решение, оказывается всё было гораздо проще 😁😁😁