Что делать?
Double тоже нужны?
На входе:
На выходе:
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;
/*
Замена чисел
*/
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 {
printChangesDataFile(getFileName());
// String s = "3.2";
// if(s.contains(".")) {
// System.out.println("string contains dot");
// }
}
private static String getFileName() throws IOException {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))){
return reader.readLine();
// return "/home/someboy/Документы/test1.txt";
}
}
private static void printChangesDataFile(String fileName) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))){
while (reader.ready()) {
String line = reader.readLine();
StringBuilder builder = new StringBuilder(line);
for(String elem: builder.toString().split(" ")){
if(isNumeric(getStrip(elem))) {
if(map.containsKey(Integer.parseInt(getStrip(elem)))) {
getChangeString(elem, builder);
}
// else System.out.println("Строка без изменений: "+ elem);
}
}
System.out.println(builder);
}
}
}
private static String getStrip(String str) {
return str.replaceAll("\\p{Punct}", "");
}
private static boolean isNumeric(String str) {
try {Integer.parseInt(str); return true;}
catch (NumberFormatException e) {return false;}
}
private static void getChangeString(String str, StringBuilder builder) {
int strIndex = builder.indexOf(str);
String mapGetValue = map.get(Integer.parseInt(getStrip(str)));
String punctStart = String.valueOf(str.toCharArray()[0]);
String punctEnd = String.valueOf(str.toCharArray()[str.length()-1]);
// System.out.println("Это число: " + str);
if(punctStart.equals(".")) {
builder.replace(strIndex, strIndex + str.length(), punctStart + mapGetValue);
// System.out.println("В начале точка: " + str + ", меняем на: " + punctStart + mapGetValue);
}
else if(!isNumeric(punctStart)) {
builder.replace(strIndex, strIndex + str.length(), punctStart + mapGetValue);
// System.out.println("В начале знак: " + str + ", меняем на: " + punctStart + mapGetValue);
}
else if(!isNumeric(punctEnd)) {
builder.replace(strIndex, strIndex + str.length(), mapGetValue + punctEnd);
// System.out.println("В конце знак: " + str + ", меняем на: " + mapGetValue + punctEnd);
}
else {
builder.replace(strIndex, strIndex + str.length(), mapGetValue);
// System.out.println("Число без знака: " + str + ", меняем на: " + mapGetValue);
}
}
}