И еще один адаптер

  • 20
  • Недоступна
Адаптировать Scanner к PersonScanner. Классом-адаптером является PersonScannerAdapter. В классе адаптере создать приватное финальное поле Scanner fileScanner. Поле инициализировать в конструкторе с одним аргументом типа Scanner. Данные в файле хранятся в следующем виде: Иванов Иван Иванович 31 12 19
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (209)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Илья Соколов19 уровень, Москва
вчера, 14:02
привет англичанам)) firstname(первое имя) = имя middlename(второе имя) = отчество lastname(фамилия) = фамилия
terrorist8620 уровень, Николаев
Wednesday, 16:04
Из-за своей невнимательности фамилию, имя и отчество три раза в неправильном порядке заносил. И не мог понять, что же не нравится валидатору )))
Илья Огнев20 уровень, Санкт-Петербург
29 May, 10:03
Для тех, кто не сразу понял что должен делать метод read. 1. Сканер считывает одну строчку как в примере (lastName firstName middleName 31 12 1950); 2. На основе этой строчке нужно создать объект класса Person.
Андрей19 уровень, Львов
22 May, 19:48
Задача интересная на понимание адаптеров. Плюсую
Vladimir Titov23 уровень, Тольятти
21 May, 17:38
Ключевое: в методе read читаем 1 строку из файла методом scanner.nextLine(); далее разбиваем эту строку методом split и в конструктор класса person кладем нужные элементы из массива с датой не заморачивайтесь, 4м параметром в конструктор person кладем объект date, его как то через SimpleDateFormat приводить к иному виду не надо. Год, месяц и день выдергиваем так же из массива как и имя, фамилию
Calendar calendar = new GregorianCalendar(year, month-1, day);
Date date = calendar.getTime();
Михаил20 уровень, Воронеж
13 May, 18:03
Решал через регулярки. Убил целый день. Похоже, при проверке валидатор вводит что-то вроде: Иван0в-Петр'jd Ив@н Ivanoviĉ 31 12 1950 Поэтому никакие шаблоны для русских вменяемых имен проверку не проходят. Пришлось использовать вот такой вариант:
([^\\s]+)\\s([^\\s]+)\\s([^\\s]+)\\s(\\d+?\\s\\d+\\s\\d+)
через .split() конечно быстрее бы решил. ему ведь все равно, что там написано. обидно за зря потраченное время.
progdamn26 уровень, Санкт-Петербург
26 April, 13:22
а я разделил текст регулярными выражениями
String a = fileScanner.nextLine().replaceFirst("([а-яА-Я]+)\\s([а-яА-Я]+)\\s([а-яА-Я]+)\\s(\\d{2}\\s\\d{2}\\s\\d{4})", "$2, $3, $1, $4");
Leonid34 уровень, Киев
30 April, 14:49
Что это? 😱
progdamn26 уровень, Санкт-Петербург
1 May, 05:01
регулярки лучше выучить перед тем как дальше идти (конечно можно и без них) в начале 19 уровня самый популярный комментарий дает кучу ссылок для их изучения можете глянуть
Leonid34 уровень, Киев
1 May, 08:22
Ну так я об этом и говорю. Написанная выше регулярка явно создана не тем, кто в них хорошо разбирается.
progdamn26 уровень, Санкт-Петербург
1 May, 08:31
ааа ясно, а можете сказать где я на портачил?
Leonid34 уровень, Киев
1 May, 08:58
Конкретно эту задачу я решал через SimpleDateFormat тем способом что на пару комментов ниже описал TrueTony - мне это кажется более логичным. Но если привязаться к регулярке то конкретно в вашей например вместо [а-яА-Я]+ можно написать \w Туда, конечно, войдут и цифры, но решению это никак не помешает, а регулярка станет намного короче.
progdamn26 уровень, Санкт-Петербург
1 May, 09:15
\w это то же самое что и [a-zA-Z0-9] русские буквы туда не входят
Leonid34 уровень, Киев
1 May, 09:29
Ну "\S+" тогда. Непробельны символы и за ними пробел.
progdamn26 уровень, Санкт-Петербург
1 May, 09:50
да так можно и под эту конкретно задачу подойдет, но я считаю что лучше конкретизировать регулярные выражения что бы подходило только то что нужно. Видели ли вы чтобы было такое вот имя у кого нибудь ;2%"?*_5=+325
Leonid34 уровень, Киев
1 May, 10:03
А это уже другой вопрос))) Если такого имени не должно быть - реализуем проверку в конструкторе и геттере класса Person и не допускаем создания экземпляра. Инкапсуляция зачем? А то вы проверку сделали, а кто-то в своем методе не сделал - и смог создать своего Person с таким прекрасным именем.
progdamn26 уровень, Санкт-Петербург
1 May, 13:35
можно и так, но зачем? Все же мы зашли в дебри этот диалог какой-то бессмысленный предлагаю остановиться. К слову как вы так быстро прошли этот уровень только вчера были здесь. Я лично на этот уровень дней 5-7 убил
Leonid34 уровень, Киев
1 May, 14:20
Зачем - для того чтобы гарантировать всех от создания экземпляра класса снекорректными данными. Если помните, об этом было в лекциях по ООП, они там страховались от создания кота с отрицательным значением веса. Но это и вправду уже дебри))) По прохождению - мне на все задачи одного уровня 2 дня хватает, но есть момент, я три года назад учил джаву и что-то помню, с нуля было бы сложнее.
Алексей Чумаков20 уровень, Ногинск
Tuesday, 13:21
Маск только такими и называет
Сергей22 уровень
19 April, 16:55
чем писать требования по формату, может было бы создать сразу файлик с именами в репозиторий задачи?
TrueTony20 уровень, Москва
17 April, 17:45
Не надо мучится с календарями для Date Достаточно использовать SimpleDateFormat String[] sarray = fileScanner.nextLine().split(" ", 4); SimpleDateFormat format = new SimpleDateFormat("dd MM yyyy", Locale.ENGLISH); Date datef = format.parse(sarray[3]);
Даниил20 уровень, Алматы
15 April, 12:14
Мучался с валидатором, так как выдавал что невозможно преобразовать Date к String.На сайте сбросил задачу, заново скопировал с Идеи и прошла 😡