Почему вначале отрабатывает правильно, а потом перестаёт? На многих текстах проверял, результат везде один чем больше замен в начале текста, тем меньше замен произойдет потом. Логика подсказывает, что это как-то связано с длинной StringBuilder'a в самом начале до замены, и после(она увеличивается). То есть если в файле будет просто "0", замена произойдет на "ноль". Если будет "0 1", результат уже будет "ноль 1", как буд-то вышли за рамки массива символов строки, но в таком случае должно исключение быть или что-то в этом роде, или же нормально отработать. Объясните дураку логику плиз)
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.ArrayList;
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<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{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
StringBuilder sb = new StringBuilder();
BufferedReader reader1 = new BufferedReader(new FileReader(fileName));
while (reader1.ready()) {
sb.append(reader1.readLine());
}
reader1.close();
Pattern pattern = Pattern.compile("\\b\\d+\\b");
Matcher matcher = pattern.matcher(sb);
while (matcher.find()) {
int number = Integer.parseInt(matcher.group());
if (map.containsKey(number)) {
sb.replace(matcher.start(), matcher.end(), map.get(number));
}
}
System.out.println(sb);
}
}