Существует ли регулярное выражение, которое будет генерировать массив строк, разбивая строку для первых двух пробелов (""), а затем добавляя остальные к одному индексу массива? - PullRequest
0 голосов
/ 26 октября 2019

У меня есть следующий текстовый файл:

25678399287 James Hi there!
24467448489 Randy yo, how are you?
36373783388 Fred Ciou amigos!

Я хочу разбить каждую строку на: 1. число 2. имя 3. сообщение.

До сих пор у меня естьбыл в состоянии разбить строку на имя номера и сообщение, используя string.split (""). Однако это получает только первое слово сообщения ... Как получить остальную часть сообщения?

 String line;

            while ((line = r.readLine()) != null) {
                String[] split = line.split(" ");
                Arrays.stream(split)
                        .forEach(System.out::println);
                messages.add(new Message(Instant.ofEpochSecond(Long.parseUnsignedLong(split[0])), split[1], split[2]));

Текущий вывод: 25678399287 Джеймс Привет

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Вы можете попробовать это регулярное выражение:

(\\d+) ([A-Z][a-z]+) (.+)

https://regex101.com/

0 голосов
/ 26 октября 2019

Я бы использовал здесь формальное регулярное выражение, а затем неоднократно применял бы его для каждой строки в вашем файле:

String input = "25678399287 James Hi there!\n24467448489 Randy yo, how are you?\n36373783388 Fred Ciou amigos!";
String pattern = "(\\d+) (\\S+) (.*)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
while (m.find()) {
    System.out.println("number: " + m.group(1) + ", name: " + m.group(2) + ", message: " + m.group(3));
}

Это печатает:

number: 25678399287, name: James, message: Hi there!
number: 24467448489, name: Randy, message: Randy yo, how are you?
number: 36373783388, name: Fred, message: Ciou amigos!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...