Java регулярное выражение для извлечения числа из строки - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть следующий строковый ввод.

String s = "I have 5000 bananas";

Я извлекаю значение цифры c, используя регулярное выражение String regex = "\\b\\d+\\b". Это регулярное выражение хорошо в том смысле, что оно исключает любые смешанные слова числового типа, такие как a4 bc3.

Проблема возникает, когда пользователь вводит строки типа

String s1 = "I have 2 345 bananas";
String s2 = "I have 2,345 bananas";
String s3 = "I have #2345 bananas";
String s4 = "I have 5654 6 bananas";

Моя программа должна вывести пустая строка в указанных выше случаях, поскольку ни одно из них не является допустимым числом во входной строке.

1 Ответ

0 голосов
/ 06 апреля 2020

Вы хотите использовать группу захвата и метод String replaceAll.

...

String[] strs = new String[] {
    "I have 5000 bananas",
    "I have 2 345 bananas",
    "I have 2,345 bananas",
    "I have #2345 bananas",
    "I have 5654 6 bananas"
};

for (String s : strs) {
    if (s.matches("(\\d+)( \\D+)")) {
        System.out.println(s.replaceAll("(\\d+)( \\D+)", "$1"));
    }
    else if (s.matches("(\\D+ )(\\d+)")) {
        System.out.println(s.replaceAll("(\\D+ )(\\d+)", "$2"));
    }
    else if (s.matches("(\\D+ )(\\d+)( \\D+)")) {
        System.out.println(s.replaceAll("(\\D+ )(\\d+)( \\D+)", "$2"));
    }
    else {
        // Just for demonstration on "displaying" or
        // if you need to return or assign an empty string
        System.out.println("");
    }
}

...

Выполнение этого для предоставленных вами тестовых примеров приведет к: (Я использую строку "Нет соответствия" "вместо пустой строки просто для демонстрации)

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