Выделяем числа

  • 10
  • Недоступна
Считать с консоли 2 имени файла. Вывести во второй файл все числа, которые есть в первом файле. Числа выводить через пробел. Закрыть потоки. Пример тела файла: 12 text var2 14 8v 1 Результат: 12 14 1
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (138)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Nordis24 уровень, Санкт-Петербург
11 августа, 14:16
С таким паттерном ("\\b\\d+\\b"). У меня в файл записывает 12 14 8 1 , а по заданию должен 12 14 1 . Но Валидацию прошёл успешно. Странно , дело в том что я пытался на протяжении нескольких часов убрать эту 8 -ку . И у меня не получалось . Думаю дай так попробую , может прокатит...и Вуаля! Я даже создал паттерн с lookahead и lookbehind ("(?<=\\b)\\d+(?=\\b)") . Дабы что бы 100% убрать 8 -ку. А она всё равно есть! Я так понимаю это с кодировкой символа что то не так . Так как после 8 стоит ю .Кирилица. Я заменял на латиницу , и тогда пропадала 8 -ка . Короче этот момент мне не понятен.
Денис Бурков19 уровень, Москва
вчера, 15:21
Та же самая ситуация.
Арзамас19 уровень, Самара
5 часов назад
Да, дело в кодировке. Попробовал в нотпаде преобразовать исходный файл из UTF-8 в ANSI и сохранил. Восьмерка появилась. Преобразовал обратно в UTF-8 без BOM, и восьмерка пропала. Видимо, незнакомые символы в анси интерпретируются, как граница слова.
Роман Князев22 уровень, Санкт-Петербург
12 июня, 16:51
Нам нужно спарсить числа, зачем тут использовать регулярные выражения? У меня метода 1. Записываем все в строку 2. Строку разбиваем в массив по пробелу 3. по всему массиву проходимся
try {
    String X = Integer.parseInt(e) + " ";
    fileWriter.write(X);
}
catch (Exception c){ }
Как следствие, если можем преобразовать в число, то пишем в файл, если нет, то ошибка на пропускает нас на следующую итерацию.
Alexey Matias19 уровень, Санкт-Петербург
16 июля, 18:35
Только в случае, когда мы используем regex, мы записываем еще лишний пробел в конец файла
Ivan25 уровень, Нижний Новгород
16 июля, 18:39
так в try..catch ведь тоже самое, разве нет?
Alexey Matias19 уровень, Санкт-Петербург
16 июля, 19:08
Ваша правда)
Anton Rymarenko25 уровень
5 июня, 17:22
можно сделать через паттерн ,кстати полездно будет с ним познакомиться.а можно парсить через кетч блок .и да split("\\w") не пройдет , он не видит кириллици,на сколько я понял .Не повторяйте моих ошибок)))
skybright33 уровень
29 мая, 17:56
Эту (3) решил без подсказок, так как всерьез стал вчитываться в статью Кажется начал понимать.
АртемGeek25 уровень, Москва
28 мая, 14:40
Сделал так: 1. Делим считанную строку из файла на массив строк 2. Создаем паттерн, является ли строка числом. 3. Применяем его к каждой строке, если является записываем во второй файл.
Artem Yaremchuk26 уровень, Омск
2 июня, 12:26
Тоже так сделал
Ivan25 уровень, Нижний Новгород
16 июля, 09:49
можно паттерн и не создавать, ведь у строки и так есть метод matches().
niko22 уровень, Харьков
22 мая, 22:52
первая задача которую я реально использовал для дела
Viktor Shpakovsky20 уровень
16 мая, 02:39
Мне помогло Character.isDigit(char) и StringBuilder builder = new StringBuilder(); builder.append(ch).
MrKermit22 уровень, Москва
24 апреля, 10:33
Я:
bufferedReader.close();
bufferedReader1.close();
bufferedWriter.close();
Валидатор: Убедись, что у объекта BufferedReader вызывается метод close(). Замечательно
Oleg Zaytsev24 уровень
21 мая, 18:56
fileReader.close(); fileWriter.close(); ez close ez life
Gatis22 уровень
24 апреля, 08:21
NewBuy25 уровень, Санкт-Петербург
13 апреля, 14:43
Кто может объяснить, почему при вызове метода
matches("\\d+");
работает как нужно, но при вызове метода
matches("\\[0-9]+");
Не работает и в начале перед квадратными скобками нужно обязательно добавлять \\b типа:
matches("\\b[0-9]+");
Борис27 уровень, Москва
23 апреля, 12:39
matches("\\[0-9]+");
тут не нужны \\ нужно писать просто
matches("[0-9]+");