Проверяю на строке из примера, в файл сохраняется то что надо, но валидатор не пропускает.
package com.javarush.task.task19.task1908;
import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
public static void main(String[] args) throws IOException {
/*
String string = "12 text var2 14 8ю 1";
InputStream inputStream = new ByteArrayInputStream(string.getBytes(Charset.forName("UTF-8")));
*/
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
FileReader reader = new FileReader(bufferedReader.readLine());
BufferedReader fileReader = new BufferedReader(reader);
FileWriter writer = new FileWriter(bufferedReader.readLine());
BufferedWriter bufferedWriter = new BufferedWriter(writer);
int prev_symbol = Integer.MAX_VALUE;
StringBuilder builder = new StringBuilder();
StringBuilder tmp = new StringBuilder();
while (fileReader.ready()) //пока есть непрочитанные байты в потоке ввода
{
int data = fileReader.read(); //читаем один символ (char будет расширен до int)
char value = (char) data;
if(prev_symbol != Integer.MAX_VALUE && (data == ' ' || data == 10) && tmp.length() > 0) {
builder.append(tmp);
builder.append(" ");
tmp = new StringBuilder();
}
if(isNumber(data) && (isNumber(prev_symbol) || ' ' == prev_symbol || 10 == prev_symbol) || prev_symbol == Integer.MAX_VALUE) {
tmp.append((char)data);
} else {
tmp = new StringBuilder();
}
prev_symbol = data;
}
if(tmp.length() > 0) {
builder.append(tmp);
builder.append(" ");
}
bufferedWriter.write(builder.toString());
bufferedReader.close();
fileReader.close();
bufferedWriter.close();
//System.out.println(builder.toString().trim());
}
private static boolean isNumber(int symbol) {
Pattern re = Pattern.compile("[0-9]");
Matcher m = re.matcher(String.valueOf((char)symbol));
return m.find();
}
}