public class Solution {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
String file1 = reader.readLine();
String file2 = reader.readLine();
String ch = null;
BufferedReader reader1 = new BufferedReader(new FileReader(file1));
BufferedWriter writer2 = new BufferedWriter(new FileWriter(file2));
while ((ch = reader1.readLine()) != null) { //ложим в ch всю линию
Pattern p = Pattern.compile("\\b\\d*\\b");
Matcher m = p.matcher(ch);
while(m.find()) {
writer2.write(m.group());
writer2.write(" ");
}
}
reader1.close();
writer2.close();
}catch (IOException ex) {}
}
}JavaSutra
35 уровень
Почему выводит много пробелов?
Решен
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Slana
28 июня 2018, 08:08решение
Не хотите попробовать вариант:
1. считать весь текст в одну строку
2. разбить на массив по пробелу (разделили на слова)
3. и выбирать числовые значения уже по словам. Легче паттерн писать.
В принципе, можно п.1 упустить ( для больших файлов это не удачный вариант), а пп.2-3 применять к каждой строке. От пробелов избавляетесь автоматически.
+2
Alexandr Stolyarenko
27 июня 2018, 17:02решение
\b это граница слова
\d* же подразумевает возможность отсутствия символа как такового.
Резюмируя вышесказанное: промежутки между словами соответствуют паттерну и возвращают пустую строку, к которой в line:18 добавляется пробел.
Решение проблемы: заменить \d* на \d+
+2
JavaSutra
28 июня 2018, 12:12
\\W вот это еще помогло. Значит * (звездочка) включает в себя еще пробелы?
0
Alexandr Stolyarenko
28 июня 2018, 22:05решение
Нет, просто две границы слова выпадают на один символ, соответственно \b\b выдаст пустую строку на каждом односимвольном промежутке промежутке между словами, а пробел вы сами заботливо к этой пустой строке добавляете.
+2
JavaSutra
29 июня 2018, 10:46
Спасибо, Сам бы не когда не догадался бы)
0
СергейExpert
27 июня 2018, 16:08решение
Тут я бы смотрел в сторону регулярного выражения.
Зачем Вы обрамляли \\b?
+1