如果我的密钥具有以下字符序列:_(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"));
但这不会涵盖中间数字可以是任何数字(不只是四位数)的情况吗?
答案 0 :(得分:9)
您可以找出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
答案 1 :(得分:3)
你真的需要正则表达式吗?您可以使用substring
和indexOf
:
String st = "_9332123425234_1";
String number = st.substring(1,st.indexOf('_',1));
答案 2 :(得分:0)
假设您在数字序列之前和之后都有下划线,您可以使用_(\d+)_
创建捕获组。
请参阅http://download.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
答案 3 :(得分:0)
您可能还想考虑使用Splitter:
这可能比正则表达式更有效,因为它返回所有元素,您将是元素的前后元素以及中间的数字。所以,如果你最终需要第二个“_”之后的数字,这可能是更好的方法。