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

  • 20
  • Недоступна
В метод main первым параметром приходит имя файла. В этом файле каждая строка имеет следующий вид: имя день месяц год где [имя] - может состоять из нескольких слов, разделенных пробелами, и имеет тип String. [день] - int, [месяц] - int, [год] - int данные разделены пробелами. Заполнить список PEOPL
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (264)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Alexandr Vlasov
Уровень 22, Москва
23 августа, 13:16
Почитал комменты, на мой взгляд неверно в задачи отрезать по первой цифре. А вдруг попадется сын Маска или цифровые имена роботов? В условии четко сказано, что только последние три числа дата. Значит они точно есть. Разбиваем строку и складываем первые подстроки, а последние три в дату уже кидаем. Длинна массива и цикл. Как решить с помощью регулярных выражений знаний пока не хватает
Maxim Dimitrov
Уровень 35
10 августа, 09:39
Как разбить строку одной командой: String[] line = reader.readLine().split("(?<!\\d) (?=\\d)"); Это означает "пробел, после которого идёт цифра и перед которым - не-цифра" https://learn.javascript.ru/regexp-lookahead-lookbehind
Роман Кончалов
Уровень 24, Россия
Expert
18 сентября, 13:31
Надежнее: разбить по пробелами и взять последние 3 слова на дату, а всё что перед этим на имя.
Галкин Юрий
Уровень 25, Москва
6 августа, 15:00
Нельзя удалять эти методы, даже если они вам не нужны.
public String getName() {
    return name;
}

public Date getBirthDate() {
    return birthDate;
}
Vladyslav Pelykh
Уровень 31, Днепр, Украина
30 июля, 12:59
Подскажите хорошую статью про регулярки...
Алексей Хехнев
Уровень 20, Санкт-Петербург
13 августа, 17:12
Vitaliy Kovalenko
Уровень 23, Киев, Україна
5 сентября, 12:19
https://tproger.ru/articles/java-regex-ispolzovanie-reguljarnyh-vyrazhenij-na-praktike/ Вот еще хорошая статья попалась.
Саня
Уровень 30, Москва
6 июля, 13:52
Нашёл, на стаковерфлоу как отрезать строку по первой цифре:
"some text 12 345".split("(?=\\d)",2)
//будет ["some text ","12 345"]
как эта регулярка работает, ещё до конца не понял, но в общих чертах, так: (?=\\d) называется Positive Lookahead, она ищет цифру после чего-нибудь, и делит строку на этой позиции, причём сама найденная цифра не "съедается" регуляркой
Lycurgus
Уровень 37, Казахстан
5 июля, 14:36
Хм, я использовал следующую логику, тоже получилось решить
String name = data.replaceAll("\\d+", "").trim();
String[] numbers = data.replaceAll(name, "").trim().split(" ");
Сергей
Уровень 20
27 июля, 11:14
через реджексы реальный огород. Ваш способ в данном случае гораздо читабельней и быстрее.
Anonymous #2581456
Уровень 30, Москва, Россия
22 июня, 16:53
Решение по именам без регулярок. Простое и дубовое. 1. считываем строку и разбиваем в массив. 2. arr[arr.length - 1] , arr[arr.length - 2], arr[arr.length - 3] ВСЕГДА будут датами. с этим проблем не будет. 3. имена это nameLen = arr.length - 3 (сколько элементов массива занимает имя). далее к пустой строке name в цикле прибавляем :
for (int i = 0; i < nameLen; i++) {
    name += (arr[i] + " ");
 }
всё. строка name это и есть любое даже самое заковыристое имя. перед подачей в конструктор делаем ей trim().
Morak Dim
Уровень 29, Благовещенск, Россия
6 августа, 06:39
Простое и читабельное, а не как с демоническими надписями регулярок. Я так же решил, правда про trim() не знал(или забыл вовсе) и потому руками отсекал последний пробел. (прим. Если не отсечь последний пробел, то валя будет ругаться по пункту с какой-то фигнёй насчет двойных имён😅)
Error 404
Уровень 23, Краснодар, Россия
9 сентября, 07:25
Ваши коменты про trim() спасли мои нервы)) не мог понять, почему не принимает последние два условия, а ему пробел в конце не нравился
Евгений
Уровень 23, Омск, Россия
9 июня, 06:38
Программа должна правильно работать с двойными именами, например Анна-Надежда. вот что это за условие, и как это "правильно"
Viktor Korotkov
Уровень 22, Москва, Россия
31 мая, 21:46
"([^\\d]+)\\s(\\d{1,2})\\s(\\d{1,2})\\s(\\d{4})" PEOPLE.add(new Person(matcher.group(1), new Date(Integer.parseInt(matcher.group(4)) - 1900, Integer.parseInt(matcher.group(3)) - 1, Integer.parseInt(matcher.group(2)) )));
Данил
Уровень 27
29 мая, 05:22
Парсил каждый элемент массива line.split(" ")[i]. Если не парсится в double, то это еще имя, значит. Если парсится, то уже дата рождения пошла.