Java: использовать регулярное выражение для извлечения числа в строке - PullRequest
1 голос
/ 09 мая 2011

У меня есть строка формата "[232] .......". Я хочу извлечь 232 из строки, я сделал это

public static int getNumber(String str) {
    Pattern pattern = Pattern.compile("\\[([0-9]+)\\]");
    Matcher matcher = pattern.matcher(str);
    int number = 0;
    while (matcher.find()) {
        number = Integer.parseInt(matcher.group());
    }
    return number;
}

но это не работает, я получил следующее исключение:

Exception in thread "main" java.lang.NumberFormatException: For input string: "[232]"

Кто-нибудь знает, как я могу решить эту проблему, и есть ли для меня более эффективный способ подобного сопоставления с образцом в Java?

1 Ответ

6 голосов
/ 09 мая 2011

group() без каких-либо параметров возвращает полное совпадение (эквивалентно group(0)). Это включает квадратные скобки, которые вы указали в своем регулярном выражении.

Чтобы извлечь число, передайте 1, чтобы вернуть только первую группу захвата в вашем регулярном выражении (([0-9]+)):

number = Integer.parseInt(matcher.group(1));
...