Здравствуйте! Подскажите, пожалуйста, что не нравится валидатору? Проверяла на множестве разных примеров своих собственных, и найденных в топиках ниже (в том числе с началом, концом строк, пустыми строками, дефисами между числами , знаками препинания и т.д.) Код не красивый - первоначально было через ReplaceAll с функцией в качестве аргумента, но он с ним даже не собрался на стороне сервера, пришлось с костылями делать. :(
package com.javarush.task.task19.task1924;
import javax.swing.*;
import java.io.*;
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) {
String f1 = "";
try (BufferedReader sc = new BufferedReader(new InputStreamReader(System.in))) {
f1 = sc.readLine();
} catch (Exception e) {
}
try (BufferedReader reader = new BufferedReader(new FileReader(f1))) {
String myStr = reader.readLine();
while (myStr != null) {
Pattern pt = Pattern.compile("(?<![\\w\\d])\\d+(?![\\w\\d])");
Matcher matcher = pt.matcher(myStr);
String myStr2=myStr;
int offset=0;
while (matcher.find()) {
int start=matcher.start();
int end=matcher.end();
String gr=matcher.group();
Integer myInt=Integer.parseInt(gr);
if(map.containsKey(myInt))
{
String newStr=map.get(myInt);
String strStart=myStr2.substring(0,start+offset);
String strEnd=myStr2.substring(end+offset);
offset=offset-gr.length()+newStr.length();
myStr2=strStart+newStr+strEnd;
}
}
System.out.println(myStr2);
myStr=reader.readLine();
}
}catch (Exception e){
System.out.println(e);
}
}
}