Разделение строки с помощью Regex не возвращает значения - PullRequest
0 голосов
/ 10 января 2019

Я новичок в Regex и очень смущен, почему не получают группы, возвращаемые методом split в следующей операции:

String toSplit ="FN:Your Name";
String splitted [] = toSplit.split("(FN:)([A-Za-z]*) ([A-Za-z]*)");
System.out.println("Length: "+splitted.length);

Выход: Length: 0

Вопрос: В чем причина и как я могу получить Your и Name, возвращенные в массиве?

1 Ответ

0 голосов
/ 10 января 2019

Вы не хотите разделять, но использовать Matcher :

String toSplit ="FN:Your Name";
Pattern pattern = Pattern.compile("(?:FN:)([A-Za-z]*) ([A-Za-z]*)");
Matcher matcher = pattern.matcher(toSplit);
if (matcher.find()) {
    String[] splitted = new String[]{
        matcher.group(1),
        matcher.group(2)
    };
    System.out.println("splitted: " + Arrays.toString(splitted));
}

Результат:

splitted: [Your, Name]

Небольшое примечание: я создал первую группу без захвата с ?:, потому что вам не нужно получать его в результате.

...