Как я могу извлечь значение с помощью регулярных выражений Java? - PullRequest
1 голос
/ 29 августа 2010

Мне нужно извлечь только цифры из этого текста. Я использую подстроку, чтобы извлечь детали, иногда число уменьшается, поэтому я получаю значение ошибки ...

 example(16656);

Ответы [ 4 ]

3 голосов
/ 29 августа 2010

Используйте Pattern для компиляции вашего регулярного выражения и Matcher для получения определенной захваченной группы. Я использую регулярное выражение:

example\((\d+)\)

, который фиксирует цифры (\d+) в скобках. Итак:

Pattern p = Pattern.compile("example\\((\\d+)\\)");
Matcher m = p.matcher(text);
if (m.find()) {
  int i = Integer.valueOf(m.group(1));
  ...
}
0 голосов
/ 29 августа 2010

Я предложу вам написать собственную логику, чтобы сделать это. Использование шаблонов и совпадений из Java - хорошая практика, но это стандартные решения, которые могут не всегда подходить для эффективного решения. Подобно тому, как cletus предоставил очень аккуратное решение, но в этой логике происходит то, что алгоритм подстроки выполняется в фоновом режиме для отслеживания цифр. Тебе не нужен поиск паттернов здесь, я полагаю. Вам просто нужно извлечь цифры из строки (например, 123 из "a1b2c3"). Посмотрите на следующий код, который делает это чистым образом в O (n) и не выполняет ненужных дополнительных операций, как классы Pattern и Matcher для вас ( просто скопируйте, вставьте и запустите :)):

открытый класс DigitExtractor {

/**
 * @param args
 */
public static void main(String[] args) {

    String sample = "sdhj12jhj345jhh6mk7mkl8mlkmlk9knkn0";

    String digits = getDigits(sample);

    System.out.println(digits);
}

private static String getDigits(String sample) {

    StringBuilder out = new StringBuilder(10);

    int stringLength = sample.length();

    for(int i = 0; i <stringLength ; i++)
    {
        char currentChar = sample.charAt(i);
        int charDiff = currentChar -'0';

        boolean isDigit = ((9-charDiff)>=0&& (9-charDiff <=9));

        if(isDigit)
            out.append(currentChar);

    }

    return out.toString();
}

}

0 голосов
/ 29 августа 2010
String yourString = "example(16656);";

Pattern pattern = Pattern.compile("\\w+\\((\\d+)\\);");
Matcher matcher = pattern.matcher(yourString);
if (matcher.matches())
{
    int value = Integer.parseInt(matcher.group(1));
    System.out.println("Your number: " + value);
}
0 голосов
/ 29 августа 2010

посмотрите на пример регулярных выражений Java здесь:

http://java.sun.com/developer/technicalArticles/releases/1.4regex/

специально для find method.

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