Одиночные цифры из строки в Java Regex - PullRequest
1 голос
/ 17 июня 2020

Учитывая строку

1 3 2 1 9 1 bla 3 4 3

Я обнаружил, что

/b[1-4]/b 

вернет только цифры 1 2 3 4, поскольку это показывает, но String[] input = args[0].split("\b[1-4]\b"); нет возврат

{"1","3","2","1","1","3","4","3"}

Ответы [ 3 ]

3 голосов
/ 17 июня 2020

Я предполагаю, что вам нужны только цифры от 1 до 4. Простого разбиения будет недостаточно. Один из подходов может быть примерно таким:

String str = "1 3 2 1 9 1 bla 3 4 3";
String[] splitAndFilter = Pattern.compile("\\s+")
                                 .splitAsStream(str)
                                 .filter(s -> s.matches("[1-4]"))
                                 .toArray(String[]::new);
System.out.println(Arrays.toString(splitAndFilter));
2 голосов
/ 17 июня 2020

Проблема с вашим текущим подходом в том, что вы пытаетесь разделить на сами числа. Это не даст желаемого результата, потому что то, что вы разделяете, получает потребляется (читай: удалено), оставляя все остальное позади. Вместо этого попробуйте разделить на [^1-4]+:

String input = "1 3 2 1 9 1 bla 3 4 3";
String[] parts = input.split("[^1-4]+");
System.out.println(Arrays.toString(parts));

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

[1, 3, 2, 1, 1, 3, 4, 3]

Это будет разделено на один или несколько символов, отличных от 1-4. Это работает для вашей входной строки, потому что пробел является разделителем, а также несоответствующие цифры и слова должны быть удалены.

1 голос
/ 17 июня 2020

Вы можете использовать только [1-4] в качестве регулярного выражения.

import java.util.Arrays;
import java.util.regex.MatchResult;
import java.util.regex.Pattern;

class Main {
    public static void main(String[] args) {
        String[] matches = Pattern.compile("[1-4]")
                .matcher(args[0])
                .results()
                .map(MatchResult::group)
                .toArray(String[]::new);
        System.out.println(Arrays.toString(matches));
    }
}

Вывод:

[1, 3, 2, 1, 1, 3, 4, 3]

, где аргумент командной строки - "1 3 2 1 9 1 bla 3 4 3"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...