На https://regex101.com/ если я напишу регулярное выражение \b1\b - найдет только первую единицу перед словом "бакс", в числе 12 - её не найдет. Но когда я запускаю этот код, то строка меняется на "Это стоит один бакс, а вот это - один2 .", а не на нужное мне "Это стоит один бакс, а вот это - двенадцать ." Почему ? Это особенности обработки регулярных выражений на Java ? Как записать регулярное выражение, чтобы получить нужный мне результат ?
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));
BufferedReader fr = new BufferedReader(new FileReader(reader.readLine()));
reader.close();
String s;
while (fr.ready()){
s = fr.readLine();
for (Integer integer : map.keySet()) {
Pattern r = Pattern.compile("\\b"+String.valueOf(integer)+"\\b");
Matcher m = r.matcher(s);
if (m.find()){
s = s.replace(String.valueOf(integer) ,map.get(integer));
}
}
System.out.println(s);
}
fr.close();
}
}