Как получить число между подчеркиванием? - PullRequest
1 голос
/ 14 сентября 2011

Если у меня есть ключ, который имеет следующую последовательность символов: _(some number)_1. Как я могу просто вернуть (some number).

Например, если ключ _6654_1, мне просто нужно значение 6654. Проблема / проблема, которая действительно смущает меня, состоит в том, что число может быть любой длины, например _9332123425234_1, в этом случае мне просто понадобится 9332123425234.

Вот что я пробовал до сих пор:

Pattern p = Pattern.compile("_[\\d]_1");
Matcher match = p.matcher(request.getParameter("course_id"));

но это не будет охватывать случай, когда среднее число может быть любым числом (не только четыре цифры), не так ли?

Ответы [ 4 ]

9 голосов
/ 14 сентября 2011

Вы можете просто выяснить indexOf('_') и затем использовать substring.Нет необходимости в регулярных выражениях.

... но так как вы запросили регулярные выражения, здесь вы идете:

import java.util.regex.*;

class Test {
    public static void main(String[] args) {
        String str = "_6654_1";

        Pattern p = Pattern.compile("_(\\d+)_1");
        Matcher m = p.matcher(str);
        if (m.matches())
            System.out.println(m.group(1));  // prints 6654
    }
}

(А вот и подход substring для сравнения :)

String str = "_6654_1";
String num = str.substring(1, str.indexOf('_', 1));
System.out.println(num);                     // prints 6654

И, окончательное решение с использованием простого split("_"):

String str = "_6654_1";
System.out.println(str.split("_")[1]);   // prints.... you guessed it: 6654
3 голосов
/ 14 сентября 2011

Вам действительно нужно регулярное выражение? Вы можете использовать substring и indexOf:

String st = "_9332123425234_1";
String number = st.substring(1,st.indexOf('_',1));
0 голосов
/ 14 сентября 2011

Вы также можете рассмотреть возможность использования Splitter:

Разветвитель

Это может быть более эффективно, чем регулярное выражение, и, поскольку оно возвращает все элементы, вы будете элементами до и после, а также число в середине. Так что, если вам в конце концов понадобится число после второго «_», это может быть лучший путь.

0 голосов
/ 14 сентября 2011

Если у вас есть подчеркивания до и после последовательности цифр, вы можете использовать _(\d+)_ для создания группы захвата.

См. http://download.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

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