Добрый день!
Прошу объяснить некоторые моменты.
Я начала решать через поиск чисел в считанной из файла строке с помощью паттерна, хотела их сравнить с ключами в мапе и при соответствии заменить значением из мапы. Посмотрев правильное решение и прочитав кучу вопросов в "помощи":
1) Для решения задачи в принципе не нужны паттерны? Строки из кода лишние? И почему при выводе в консоль переменной numS выводится только первое число из строки из файла? Я для себя уяснила, что из-за того, что как только в строке if (matcher.find()) нашлось первое число, оно записалось в numS и if закончил свою работу? Если использовать while, то сначала запишется первое число из строки, потом "перезапишется" второе и результатом будет последняя итерация?
Pattern pattern = Pattern.compile("\\b\\d+\\b");
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
numS = matcher.group();
// System.out.println(num);
}
2) Нет смысла сравнивать числа из считанных строк в цикле с ключами мапы, так как все равно не записываются в numS все нужные числа из строки. И использовать переменную result тоже не нужно, так как она "перезаписывается" так же по последней итерации?
3) Можно как-то мое нерабочее решение привести с рабочему коду?
package com.javarush.task.task19.task1924;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.ParseException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Замена чисел
*/
public class Solution {
public static Map<Integer, String> map = new HashMap<Integer, String>();
static {
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,"двенадцать");
}
public static void main(String[] args) throws IOException {
String numS = "";
String result = "";
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader fileReader = new BufferedReader(new FileReader(reader.readLine()))) {
while (fileReader.ready()) {
String line = fileReader.readLine();
Pattern pattern = Pattern.compile("\\b\\d+\\b");
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
numS = matcher.group();
// System.out.println(num);
}
for (Map.Entry<Integer, String> entry: map.entrySet()
) {
if (entry.getKey().toString().equals(numS)) {
result = line.replaceAll("\\b" + entry.getKey().toString() + "\\b", entry.getValue());
}
}
System.out.println(result);
}
}
}
}