Хуан Хуанович

  • 10
  • Недоступна
В метод main первым параметром приходит имя файла. В этом файле каждая строка имеет следующий вид: имя день месяц год где [имя] - может состоять из нескольких слов, разделенных пробелами, и имеет тип String. [день] - int, [месяц] - int, [год] - int данные разделены пробелами. Заполнить список PEOPL
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (121)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Николай22 уровень
воскресенье, 21:32
Зачем регулярки? прошелся сплитом - последние 3 значения это дата, все остальные - это имя.
Эмиль Кан20 уровень, Москва
воскресенье, 21:00
String pattern = "(\\D+)\\s(\\d{1,2})\\s(\\d{1,2})\\s(\\d+)";
Antony.Glim26 уровень
20 февраля, 16:44
PEOPLE.add(new Person(stringBuilder.toString(), new Date(year - 1900, month - 1, date)));
Эта строчка прекрасна блин! Здесь прекрасно все!
Тагир23 уровень
31 января, 20:50
Чтобы не использовать trim(), вместо split(" "), лучше применить split("\\s+").
Kad22 уровень
29 января, 22:56
Мне казалось, что все нормально, валидатор ругался на пункты: 5. Программа должна заполнить список PEOPLE данными из файла. 6. Программа должна правильно работать с двойными именами, например Анна-Надежда Оказывается, хотел trim(). Спасибо, что посоветовали в комментах.
Артур22 уровень, Санкт-Петербург
9 декабря 2018, 19:55
Вот такая страшная регулярка. Можно было обойтись \\d+, вместо \\d\\d?
Pattern pattern = Pattern.compile("^(.*) (\\d\\d? \\d\\d? \\d{4})$");
        while (reader.ready()) {
            Matcher matcher = pattern.matcher(reader.readLine()); //считанную строку сразу в матчер загоняю
            if (matcher.find()) //проверяю строку на соответствие моей регулярке.
Дальше группу один в имя записать, группу 2 распарсить как дату через SimpleDateFormat и записать в дату рождения, добавлять через новый объект Person.
DancingShaman23 уровень
13 ноября 2018, 22:49
Я - человек простой, если задача решается с первой попытки без танца с бубном, то я её лайкаю, если приходиться сидеть до красноты глаз и бороться с валидатором, то пишу гневный коммент, но на этот раз - лойс за задачу. Искал через такую регулярку (^.+(\s.+\s.+)?)\s(\d+)\s(\d+)\s(\d+) - она кривая и неоптимизованная, но работает же :D
Gogogo31 уровень
2 ноября 2018, 15:58
5 попыток на то, чтобы понять, что "разделены пробелами" может означать несколько пробелов подряд. В т.ч. в начале и конце строки.
Александр Колосов34 уровень, Санкт-Петербург
4 января, 20:44
Согласен. Если бы не Ваш комментарий, не догадался бы. Считаю, что такие варианты из разряда - "найди то, не знаю что".
Татьяна39 уровень, Москва
7 сентября 2018, 20:33
Pattern pattern = Pattern.compile("([\\D]+)\\D+(\\d+ \\d+ +\\d+)");
Считываем из файла построчно, строку запихиваем в Matcher. matcher.group(1) - имя matcher.group(2) - дата
Максим27 уровень
13 сентября 2018, 16:20
Непонятна запись во второй групее: \\d+ +. Что второй плюс обозначает? Скажите пожалуйста, почему не написать 3 группу (\\d+ \\d+ \\d+). Вроде, работает так
Татьяна39 уровень, Москва
13 сентября 2018, 16:58
второй плюс это, видимо,у меня опечатка Не поняла на счет третьей группы, зачем она, если есть вторая такая же - (\\d+ \\d+ \\d+)
Максим27 уровень
13 сентября 2018, 19:15
Я имел ввиду, группу, третью по счёту. (нумерация групп с нуля начинается, group(0) - (([\\D]+)\\D+(\\d+ \\d+ \\d+))
Татьяна39 уровень, Москва
14 сентября 2018, 17:09
а, ну да, так я изначально и задумывала третью группу)
Anastasiia20 уровень
11 февраля, 17:30
что касается нумерации, то group(0), это полное совпадение всего паттерна https://stackoverflow.com/questions/14385834/java-regex-group-0 , далее группа 1я, это то, что в первых скобках, группа вторая то, что во вторых.
Andry Max35 уровень, Минск
11 августа 2018, 21:14
как же у меня горит. всё идеально работает, а валидатор меня просит убедиться, что я считываю данные из файла?!?!? да я именно файл использовал для теста программы и считывал с него... конструкция была и через Buffred и через просто FileRader - ни в какую... в итоге скопипастил из интернета код, т.к. на просто попытки пройти угрохал 40 мин.
Victoria Sedletskaya35 уровень, Одесса
5 ноября 2018, 00:10
разобралась, от месяца забыла отнять 1, они же с нуля нумеруются