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

  • 20
  • Недоступна
Считать с консоли 2 имени файла. Вывести во второй файл все числа, которые есть в первом файле. Числа выводить через пробел. Закрыть потоки. Пример тела файла: 12 text var2 14 8v 1 Результат: 12 14 1
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (252)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Иван19 уровень, Нижний Новгород
суббота, 11:31
эти задачи не на тему FileReader/FileWriter, они скорее на регулярные выражения, как и весь 19 уровень. 99% времени тратится на них.
Максим23 уровень, Москва
28 июля, 11:37
Сделал через эту регулярку "\\d+"
Уася24 уровень, Замусральск
24 июля, 09:58
Простая регулярка, скопированая из предыдущего задания: mat = Pattern.compile("\\b\\d+\\b").matcher(file.readLine());
Dmitry23 уровень, Минск
25 июля, 10:17
Спасибо. Я уже хотел в масив байтов или букв все выводить. т.к. мой паттерн (\\s\\d+\\s) оказался не логичным. Но решил заглянуть в комменты.
Pavel Lysenkov19 уровень, Тверь
пятница, 23:07
readFile.readLine().replaceAll("(([A-Za-zА-Яа-я]+([\\d]*)).+?)|((([\\d]*[A-Za-zА-Яа-я]+)).+?)","")
Vladislav20 уровень
15 июля, 12:27
Выполняя прошлую порцию задач Боброва потратил пару дней на самостоятельное изучение регулярок и всего, что рядом с ними. Теперь в задачах вроде этих принципиально использую регулярки))
Артем32 уровень, Москва
15 июля, 16:50
На будущее тебе. В одной старой шутке говорится: если у вас есть проблема, и вы собираетесь решать ее с использованием регулярных выражений, то у вас есть две проблемы. и это не с пустого места появилось
Dator23 уровень, Киев
16 июля, 11:58
RegEx очень трудны в понимании кода, если сильно их напихать. Ну и быстродействие хромает. Если есть обходной вариант - лучше обойти.
Сергей28 уровень, Харьков
4 июля, 11:52
Ещё проще, разделить строку пробелами в массив стринг и приравнивать значения к интегеру через тру кэтч, проходит на ура, и вроде самый правильный вариант.
Артем32 уровень, Москва
15 июля, 16:49
это один из вариантов, второй, проверять на наличие букв/знаков пунктуации в стринге. если они есть, то пропускаем.
Dator23 уровень, Киев
16 июля, 12:00
Может я и ошибаюсь, но считаю использование try/catch, не подходящим инструментом, для парсинга
Сергей28 уровень, Харьков
16 июля, 13:38
Хм, тру/кетч были созданны для таких вещей 1. 2е читаемость. 3е можно и кейсами или ифами обходить, но такой вариант требует постоянно проверять в процессе написания программы. Из минусов варианта, использование regex - не лучший вариант, в случае если программер не знает что в исходном текстовом документе вообще есть. Листать текстовый файл размером 50 Mb - танунафиг
Дмитрий22 уровень, Киев
21 июля, 11:21
Добрый день! Не могли бы вы объяснить мне, какую функцию в данном случае выполняет try/catch, заранее спасибо;)
Сергей28 уровень, Харьков
21 июля, 12:26
https://www.google.com/search?q=%D0%B4%D0%BB%D1%8F+%D1%87%D0%B5%D0%B3%D0%BE+try+catch+java&oq=%D0%B4%D0%BB%D1%8F+%D1%87%D0%B5%D0%B3%D0%BE+try%2Fcatch+ja&aqs=chrome.1.69i57j33l7.7405j0j7&sourceid=chrome&ie=UTF-8 Первый запрос выдает сразу: В Java есть пять ключевых слов для работы с исключениями: try - данное ключевое слово используется для отметки начала блока кода, который потенциально может привести к ошибке. catch - ключевое слово для отметки начала блока кода, предназначенного для перехвата и обработки исключений. Но это если вкл умника😄 Другими словами, если сервер может упасть на пример при попытке почитать какой-то файл пользователем, но например: файл поврежден. То, цена ПО которым пользуется организация(пользователь), в таком случае - стремится к нулю. try - защищает от падения, а в catch блоке пишется интструкция что делать если в блоке try пошло что-то не так. Это сейчас в панеле видете например: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: start -5, end 0, length 0 at java.base/java.lang.AbstractStringBuilder.checkRangeSIOOBE(AbstractStringBuilder.java:1813) at java.base/java.lang.AbstractStringBuilder.delete(AbstractStringBuilder.java:923) at java.base/java.lang.StringBuilder.delete(StringBuilder.java:282) at com.javarush.task.task22.task2208.Solution.getQuery(Solution.java:30) at com.javarush.task.task22.task2208.Solution.main(Solution.java:15) Process finished with exit code 1 На работающем сервере этого увидеть не сможете без перехвата и как вариант, ведется запись логов через тот-же catch. В этой задаче, я знал что может быть краш (перевода строки в число), а может и нет, по этому предусмотрел инструкцию в catch. Если подвести черту, то от try/catch всем хорошо, а без него - печаль.
Игорь Birt19 уровень, Тирасполь
22 июля, 16:37
Артем, скажи пожалуйста, посредством какого метода проверять наличие букв и/или знаков пунктуации в стринге?
Vitalachka22 уровень, Лондон
20 июня, 16:02
читайте условие и требования обязательно! Меня очень расстраивает, когда в требованиях я натыкаюсь на решение задачи ещё до того как я приступила к его решению. А когда я заканчиваю код, довольненькая такая, что всё работает, я забываю про существование требования. Поэтому не забывайте читать требования. 1. использовала StringBuilder, split() 2. try-catch всё супер работает
Леонид25 уровень, Сургут
18 июня, 11:26
Небольшая подсказка "\\b\\d+\\b"
Zen Bool24 уровень, Харьков
22 июня, 05:16
Это не небольшая подсказка, это готовое решение ;)
Александр23 уровень
28 июня, 18:39
Дак не принимает же, т.к. восьмерку с "ю" берет тоже
Игорь Birt19 уровень, Тирасполь
22 июля, 16:44
Как модернизировать данное выражение, чтобы оно не захватывало букву "ю" после 8ки. ????
Zen Bool24 уровень, Харьков
22 июля, 20:27
Данное выражение не надо модернизировать, это правильное выражение. У вас косяк в чем то другом.
Игорь Birt19 уровень, Тирасполь
24 июля, 10:59
Если вам не трудно, отправьте пожалуйста личным сообщением мне код данной задачи (ваш код), спасибо!
Inzevision20 уровень, Киев
9 июня, 13:47
Хотел сделать всё по красоте: писать порциями по 1000 байт и всё такое. Потыкавшись в это всё, решил, что StringBuilder не такая уж и отвратная штука и забил на первоночальную красоту. Хотя в продакшене, наверно, нужно расчитывать на то, что прилетит файл весом пару гиг...
Dator23 уровень, Киев
16 июля, 12:02
Такая штука есть... Ноль, один, и много. Сколько байт нужно считать?) Так что буфер да, верный подход.
diN38 уровень, Санкт-Петербург
7 июня, 15:52
Из 9 попыток, 7 из-за "• Поток записи в файл (BufferedWriter) должен быть закрыт.". И почему же он не закрыт? А потому что валидатор идиот. Якобы не закрытый поток: fw.append(temp[i]).append(" "); Закрытый: fw.append(temp[i]+ " "); Как там вообще тест написан для этой задачи, у обоих вариантов написан fw.close(); после цикла и менялась только строчка выше.
Zen Bool24 уровень, Харьков
22 июня, 05:19
Это откровенный баг валидатора. Печально, что создатели курса на это никак не реагируют (по крайней мере такое впечатление)
Roman Pryshchepa41 уровень, Киев
24 июня, 05:48
Проверил разные варианты, валидатор все правильно обработал. Если проблема есть, то просьба сбросить код в личку или создать вопрос на хелпе и ссылку сбросить.
Roman Pryshchepa41 уровень, Киев
24 июня, 05:49
Если есть какие-то претензии по работе валидатора, просьба сбросить примеры кода в личку или создать вопрос в разделе помощи с прикрепленным кодом и отправить мне ссылку.
Zen Bool24 уровень, Харьков
24 июня, 09:24
О! Спасибо, постараюсь не злоупотреблять обращениями.
Alexey Tsutsoev32 уровень, Таганрог
28 мая, 14:17
https://regex101.com/r/shetAs/3 Сайт может быть полезен, при составлении регулярных выражений.