Здравствуйте!
Подскажите, пожалуйста, почему так происходит.
[This cost один dollar, but this - один2 ., This cost 1 dollar, but this - двенадцать .]
Вопрос с добавлением двух строк понятен, мы делаем два вхождения и добавляем дважды строку - это использовалось для тестирования, но если подскажете как лучше сделать оборот с одной строкой, то буду благодарен.
Но, главный вопрос, не понимаю почему число 12 меняется на "один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.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.*;
/*
Замена чисел
*/
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 path = reader.readLine();
reader.close();
BufferedReader fileReader = new BufferedReader(new FileReader(path));
List<String> listStr = new ArrayList<>();
String line;
while((line = fileReader.readLine()) != null) {
listStr.add(line);
}
String newStr = "";
List<String> newList = new ArrayList<>();
for (int i = 0; i < 1; i++) {
for (String s : listStr.get(i).split(" ")) {
try{
int number = Integer.parseInt(s);
for (Map.Entry<Integer, String> pair : map.entrySet()){
int key = pair.getKey();
String value = pair.getValue();
if (number == key) {
Pattern pattern = Pattern.compile("\\b[0-9]\\b|\\b1[0-2]\\b");
Matcher matcher = pattern.matcher(listStr.get(i));
if(matcher.find()){
newList.add(listStr.get(i).replace(s, value));
}
}
}
}catch(Exception e){
}
}
}
System.out.println(newList);
fileReader.close();
}
}
// Пример данных в файле:
// Это стоит 1 бакс, а вот это - 12 .
// Переменная имеет имя file1.
// 110 - это число.
//
// Пример вывода в консоль:
// Это стоит один бакс, а вот это - двенадцать .
// Переменная имеет имя file1.
// 110 - это число.
// 6. Программа должна выводить в консоль все строки из файла, но числа должны быть заменены на слова из словаря map.