Содержимое файла:
Это стоит 1 бакс, а вот это - 12 .
Переменная имеет имя file1.
110 - это число.
Какой должен быть вывод:
Это стоит один бакс, а вот это - двенадцать .
Переменная имеет имя file1.
110 - это число.
Какой получаю:
Это стоит один бакс, а вот это - один2 .
Переменная имеет имя file1.
110 - это число.
Как видно, "12" распознается в строке не как одно число "12", а как цифры 1 и 2, из-за этого 1 заменяется, а 2 остается.
Не могу понять, почему так происходит, потому что при отдельно проведенном вот таком тесте:
StringBuilder text = new StringBuilder("Это стоит 1 бакс, а вот это - 12 .\nПеременная имеет имя file1.\n110 - это число.");
Pattern pattern = Pattern.compile("\\b1\\b");
Matcher matcher = pattern.matcher(text);
while(matcher.find()){
System.out.println(matcher.group());
}
В консоль выводилась только 1 единица, а не 2. И если убрать ее вот так "стоит бакс", то никакой цифры вообще не будет выведено.
В чем разница между тестовым кодом и тем, что я написал к задаче?package com.javarush.task.task19.task1924;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Замена чисел
*/
public class Solution {
public static Map<Integer, String> map = new HashMap<>();
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) {
String fileName = fileNameReader();
replaceWords(fileName);
}
private static String fileNameReader(){
String fileName = null;
try (BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in))) {
fileName = consoleReader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return fileName;
}
private static void replaceWords(String fileNameInput) {
try (BufferedReader fileReader = new BufferedReader(new FileReader(fileNameInput))) {
while (fileReader.ready()) {
StringBuilder line = new StringBuilder(fileReader.readLine());
for(Map.Entry<Integer, String> pair: map.entrySet()){
String key = Integer.toString(pair.getKey());
Pattern pattern = Pattern.compile("\\b" + key + "\\b");
Matcher matcher = pattern.matcher(line);
while(matcher.find()){
line.replace(matcher.start(), matcher.end(), pair.getValue());
}
}
System.out.println(line.toString());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}