Замена чисел

  • 10
  • Недоступна
В статическом блоке инициализируйте словарь map парами [число-слово] от 0 до 12 включительно. Считайте с консоли имя и содержимое файла. Замените все числа на слова используя словарь map. После этого выведите результат на экран и закройте потоки.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (147)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Tanarri24 уровень
29 апреля, 07:18
чертова кириллица. каких только ужасов из за нее ни придумаешь: "(?:^|\\s)(\\d+)(?:\\s|$)" зато наконец то дошли руки разобраться с группами:)
Ильяс35 уровень, Москва
четверг, 10:39
Не обязательно можно было не включать в группу. Достаточно было указывать порядковый номер 2 группы. И еще можно вызвать ошибку, если в тексте будет число например 19, ведь регулярка клюнет, а вот map.get вызовет ошибку.
Tanarri24 уровень
четверг, 10:56
регулярка клюнет и на 110 в примере. но там дальше есть замечательное условие: map.containsKey
Ильяс35 уровень, Москва
четверг, 12:56
Тогда двойная проверка получается. Можно сразу тогда: "((^|\\s)"+pair.getKey()+"(\\s|$))"
Tanarri24 уровень
пятница, 11:38
но тогда мы будем 13 раз проходиться по тексту, независимо от того есть там цифры или нет. А так мы пройдемся 1 раз по тексту и проверим является ли найденное ключем. Впрочем, регулярку действительно можно было ограничить двузначным числом.
Ильяс35 уровень, Москва
пятница, 11:53
В принципе contains так и так будет внутри себя тринадцать раз проверять есть ли ключ
Tanarri24 уровень
пятница, 12:18
само собой. Но вдруг там файл с замечательной книгой "Война и Мир"? 13 раз прочитать Войну и Мир?
Ильяс35 уровень, Москва
пятница, 13:28
Причём тут файл, код читает только ключи.
Alexey Tarakanov29 уровень, Москва
22 марта, 00:13
Надо 13 значений, 0 забыл, я очень внимателен :( Минус попытка ОдинНадцать, я грамотей :( Ещё минус попытка
27 марта, 16:36
Тоже одинадцать написал и еще думал, что он от меня хочет :) причем тут 11 , если надо 13 значений заносить
Максим25 уровень, Минск
20 апреля, 20:19
Аналогично)) -2 попытки из-за ошибок в статическом блоке )
Александр23 уровень, Казань
21 марта, 12:54
Не пропустило мою крутую регулярку, которая даже русские символы учитывало. Если в примере пробел убрать у точки - то текущая регулярка которая принимается - сдуется.
Pattern.compile("[^А-Яа-яеЁ]\\b(\\d[0-2]?)\\b[^А-Яа-яеЁ]");
Николай22 уровень
19 марта, 13:40
Да блин, сколько же нас неграмотных то? одинНадцать ))))
TheDIP23 уровень, Киев
9 марта, 23:26
Долго сидел, но решил без регулярок. Если кому-то будет полезно: 1) Сплитим строку 2) Законяем в ArrayList<String> 3) делаем foreach нашей Мапы - в цикле проверяем, содержится ли каждый элемент Мапы в нашем ArrayList<String> - если содержится то берем ключ и значение - проходимся по всему ArrayList и если значение == ключу (а оно будет, так как мы узнали что оно содержится уже там) делаем arrayList.set(); 4) выводим обновленный ArrayList<String> с двумя проверками
for (int i = 0; i < arrayList.size(); i++){
                System.out.print(arrayList.get(i) + " ");
                if (arrayList.get(i).equals(".") || arrayList.get(i).endsWith(".")){
                    System.out.println();
                }
            }
5) Ну и я потом его очищал, и новую строку парсил в пустой. Всем удачи :)
Николай22 уровень
19 марта, 13:46
а как ваш код отработает, если внутри строки будет подряд несколько пробелов? А если будет набор всяких символов? Вы же сначала не соберете такую же строку (не хватит пробелов) а потом будете по каждой точке писать новую строку? Тут скорее недоработка в тестовом наборе данных для проверки решения.
Riccio23 уровень, Москва
10 мая, 19:25
Знаете, Николай, а вдруг вместо строки нам пришлют атомную бомбу? А вдруг ничего не пришлют? А вдруг пришлют, но не строку, а стриптизёршу в торте? Есть ТЗ. Была бы реальная ситуация - отправил бы ТЗ на доработку. Или сделал как написано + как я считаю правильным. Если получается просадка по срокам - косяк того, кто писал ТЗ. Делать многоуровневую "защиту от дурака" в тестовом упражнении - а смысл? Валидатор принял и этого достаточно. А если вы хотите стать в позицию заказчика - платите деньги. И тогда любой каприз. "Без внятного ТЗ - результат ХЗ" :))
Максим27 уровень
12 февраля, 16:59
одиННадцать
Nik24 уровень
13 февраля, 22:20
xDDDD тоже попался
Alexey Polyakov27 уровень
8 января, 20:26
2 попытки потратил на поиск опечаток в статическом блоке))))
Даниил29 уровень
30 января, 00:22
Я только одну))) Так что не ты один слова не знаешь)
Artem41 уровень, Екатеринбург
3 января, 18:02
Двенадцать пишется с одной "н".... Минус попытка :(( Русский в школе учить надо было ))
Роман23 уровень
24 декабря 2018, 05:28
В этой задачи валидатор проверит ваше знание русского языка ;)
Андрей Заливин31 уровень, Одесса
19 декабря 2018, 20:46
public class Solution { public static Map<Integer, String> map = new HashMap<Integer, String>(); public static void main(String[] args) throws IOException { Map<Integer, String> map = new HashMap<Integer, String>(); map.put(0, "ноль"); map.put(1, "один"); map.put(2, "два"); map.put(3, "три"); map.put(4, "четыре"); map.put(5, "пять"); map.put(6, "шесть"); map.put(7, "семь"); map.put(8, "восемь"); map.put(9, "девять"); map.put(10, "десять"); map.put(11, "одиннадцать"); map.put(12, "двенадцать"); BufferedReader filereader = new BufferedReader(new InputStreamReader(System.in)); FileReader fReader = new FileReader(filereader.readLine()); filereader.close(); filereader = new BufferedReader(fReader); Matcher m; while(filereader.ready()){ String s=filereader.readLine(); for(Map.Entry<Integer,String> pair : map.entrySet()){ m=Pattern.compile("((^| )"+pair.getKey()+"( |$))").matcher(s); while(m.find()) s=s.replaceAll(m.group(1), m.group(2)+pair.getValue()+m.group(3)); } System.out.println(s); } fReader.close(); filereader.close(); } } Не проходит по последнему пункту. Как сделать?Буду благодарен за помощь.
arzuzu25 уровень, Новосибирск
27 декабря 2018, 03:41
Если последний пункт - это: "7. Класс Solution должен содержать статический блок, в котором добавляются в map тринадцать пар." , то у вас нет статического блока
static {
    map.put(0, "ноль");
    ...
    map.put(12, "двенадцать");
}
Это должно быть в Solution, за пределами main, и map там уже объявлен
Alexey Polyakov27 уровень
8 января, 20:24
Есть раздел "Помощь".
Anastasiia20 уровень
14 февраля, 13:08
а почему не \\s, а | ?