Замена чисел

  • 20
  • Недоступна
В статическом блоке инициализируйте словарь map парами [число-слово] от 0 до 12 включительно. Считайте с консоли имя и содержимое файла. Замените все числа на слова используя словарь map. После этого выведите результат на экран и закройте потоки.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (386)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Katsuki Bakugou
Уровень 33
13 января, 13:03
Решил со 2 попытки только из-за того, что написал "нуль", а не "ноль". Если кому пригодится, то, чтобы разбить по словам, а не по пробелам "\\b".
Андрей Федоров Android Developer
23 ноября 2022, 11:59
Нашел очень простое решение
line = line.replaceAll("\\b"+String.valueOf(entry.getKey())+"\\b",entry.getValue());
Полистал коменты, я не первый)
Bingo Boom
Уровень 30
10 ноября 2022, 12:33
Сделал задачу с использованием класса Pattern и Matcher, но валик не принял, обидно. Пришлось скопировать из готового решения. Зато эта задача мотивировала меня учить регулярки
5 ноября 2022, 20:05
Очень сложно для меня оказалось(( Пора! Пора учить регулярки!
Lua gato
Уровень 24
26 октября 2022, 09:44
Встретились не изученные части регулярок, нашел пояснение тут Создал свой огород, как и многие тут 😜
KW2001
Уровень 35
22 октября 2022, 08:35
многовато сделал, а можно было ограничиться только \\b)
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader file = new BufferedReader(new FileReader(reader.readLine()));
        StringBuilder builder = new StringBuilder();
        while (file.ready()) {
            String[] line = file.readLine().split("[/.]");
            for(String s: line) {
                String[] line1 = s.split(" ");
                for(String s1:line1){
                    if(s1.matches("\\d{1,2}"))
                        builder.append(map.get(Integer.parseInt(s1))+" ");
                    else builder.append(s1+" ");
                }
                builder.deleteCharAt(builder.length()-1);
                builder.append(".");
                builder.append(" ");
            }
        }
            reader.close();
            file.close();
            System.out.println(builder.toString().trim());
    }
Олег Шукюров
Уровень 41
20 октября 2022, 09:15
Тоже регулярки, но конечно не такой лаконичный код как код ниже... не додумался :D Pattern pattern = Pattern.compile("\\b(1[0-2]?|[0-9])\\b"); Matcher matcher = pattern.matcher(result); while (matcher.find()) { result = result.replaceFirst(matcher.group(), map.get(Integer.parseInt(matcher.group()))); } System.out.println(result);
SVCH
Уровень 39
11 января, 06:52
только не хватает проверки, есть ли такое число в мапе )
Loony.java
Уровень 35
13 октября 2022, 19:27
добавлял в мапу и не заметил, что дважды добавил слово "четыре" долго ломал голову, что не так
TemaCode
Уровень 46
20 сентября 2022, 13:33
fileLine = fileLine.replaceAll("\\b" + entry.getKey() + "\\b", entry.getValue());
воткнули в regex Integer получается? мм🤔 первый раз такое вижу 😼
IrinaHonya
Уровень 45
29 сентября 2022, 20:22
Объясните пожалуста, что это значит? Я не могу понять 😕
Vitali Sin
Уровень 30
12 октября 2022, 21:11
Супер решение! Первоначально код у меня получился почти на 50 строк. Но я решил почитать комментарии. Сразу наткнулся на ваш. Не могу поверить, что это работает. С регулярками разобрался, прорешал задачи. Но такое решение мне и в голову не пришло. Круто! Нужно взять на заметку.
Grock
Уровень 29
6 декабря 2022, 14:47
Гений! :) Думаю, здесь Integer преобразуется в строку и сливается с ней в том виде, который передали. Такого эффекта можно добиться еще через String.format и вставку полученного шаблона как regexa в параметры метода реплейс.
hint1k
Уровень 32
13 сентября 2022, 09:20
Решал через деление строк. Получился код ниже. Валидатор зачел. А потом увидел правильное решение и долго ржал. BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in)); String string2 = br2.readLine(); BufferedReader br = new BufferedReader(new FileReader(string2)); while (br.ready()) { String[] strings = br.readLine().split("[\\s]"); for (int i = 0; i < strings.length; i++) { for (Map.Entry<Integer,String> entry: map.entrySet()) { if (strings[i].equals(String.valueOf(entry.getKey()))) { strings[i] = entry.getValue(); } String string3 = ""; String string4 = ""; if (strings[i].matches(".*\\p{Punct}") && strings[i].matches("\\d.*")) { String[] strings2 = strings[i].split(""); for (int j = 0; j < strings2.length-1; j++) { string3 +=strings2[j]; string4 = strings2[strings2.length-1]; } } if (string3.equals(String.valueOf(entry.getKey()))) { string3 = entry.getValue(); strings[i] = string3+string4; } } if (strings[i].contains(".")) { System.out.println(); } } for (int i = 0; i < strings.length; i++) { System.out.print(strings[i]+" "); } } br.close(); br2.close(); }