Делаю в 2 класса чисто для отработки темы с наследованием
1. В статическом блоке инициализировать словарь map парами [число-слово] от 0 до 12включительно. Например, 0 - "ноль", 1 - "один", 2 - "два"
2. Считать с консоли имя файла, считать содержимое файла.
3. Заменить все числа на слова используя словарь map.
4. Результат вывести на экран.
5. Закрыть потоки.
Пример данных в файле: Это стоит 1 бакс, а вот это - 12.
Переменная имеет имя file1.
110 - это число.
Пример вывода в консоль: Это стоит один бакс, а вот это - двенадцать.
Переменная имеет имя file1.
110 - это число.
Требования:
Класс Solution должен содержать публичное статическое поле map типа Map<Integer, String>, которое должно быть сразу проинициализировано.
Программа должна считывать имя файла с консоли (используй BufferedReader).
BufferedReader для считывания данных с консоли должен быть закрыт.
Программа должна считывать содержимое файла (используй FileReader).
Поток чтения из файла (FileReader) должен быть закрыт.
Программа должна выводить в консоль все строки из файла, но числа должны быть заменены на слова из словаря map.
Класс Solution должен содержать статический блок, в котором добавляются в map тринадцать пар.
package com.javarush.task.task19.task1924;
public class ConsolSmertiForMakliaka {
public static void CSFM(String s){
System.out.println(s);
}
}
+2
Комментарии (6)
популярные
новые
старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Это стоит один бакс, а вот это - одиндва.
Переменная имеет имя fileодин.
одинодинноль - это число.
Запускать свой код перед отправкой на проверку это действительно хорошая практика, не брезгуй ею.
По логике у тебя есть серьёзные пробелы, но если даже опустить что замена у тебя одинаково работает на 1 file1 и 110, ошибочен даже подход поиска значения на замену.
Map это хранилище пар ключ-значение, ты можешь вытащить значение по ключу. Зачем для каждой подстроки проходить всю Map каждый раз, рискуя ложными срабатываниями при этом, если можно вытащить конкретное значение сразу?
Ну вот типа такого например
if(isNumber(substring)){
result += map.get(numericValue(substring));}// а по хорошему конечно через StringBuilder если уже проходил
Тем более я вижу у тебя руки чешутся поиграться с методами, так напиши полезные методы, а не мусор всякий. Что-то что проверит что строка является числом например.
Пытаться заменить все числа сразу в строке это глупая затея, разбери её на отдельные слова и проверяй что конкретное слово подходит под требования задачи.
\b это спец символ обозначающий границу слова. Если по нему разбить строку, то ты получишь массив подстрок в этих самых границах. Дальше достаточно было бы пройтись по массиву и поступательно заменить все подходяще элементы. В том коде что приложил ты не было даже попытки что-то разбивать, просто replaceAll, что очевидно не самая лучшая идея.
1. Хромает логика замены, по текущей имплементации происходит ложное срабатывание на числах где символов больше чем 1
2. Не рекомендую писать ересь в название классов и методов, мы тут не цирковое заведение
3. Наследование ради наследования это плохая практика, должна быть очень весомая причина для его применения и чаще в том случае если мы делаем наследование от абстрактного класса, который имеет публичный(ые) финальные методы и абстрактные, которые нужно реализовать в классе наследнике