在Java中提取子字符串

时间:2011-03-17 14:25:32

标签: java regex

我有以下字符串:

"hello this.is.a.test(MainActivity.java:47)"

我希望能够提取 MainActivity.java:47 (内容'('和')'内的所有内容,只有第一次出现)。

我尝试使用正则表达式,但似乎我做错了。

由于

6 个答案:

答案 0 :(得分:4)

你可以自己做:

int pos1 = str.indexOf('(') + 1;
int pos2 = str.indexOf(')', pos1);

String result = str.substring(pos1, pos2)

或者您可以使用commons-lang,其中包含一个非常好的StringUtilssubstringBetween()

答案 1 :(得分:1)

我认为Regex有点矫枉过正。我会用这样的东西:

String input = "hello this.is.a.test(MainActivity.java:47)";
String output = input.subString(input.lastIndexOf("(") + 1, input.lastIndexOf(")"));

答案 2 :(得分:1)

这应该有效:

^[^\\(]*\\(([^\\)]+)\\)

结果在第一组中。

答案 3 :(得分:1)

您问题的另一个答案:


String str = "hello this.is.a.test(MainActivity.java:47) another.test(MyClass.java:12)";
Pattern p = Pattern.compile("[a-z][\\w]+\\.java:\\d+", Pattern.CASE_INSENSITIVE);
Matcher m=p.matcher(str);

if(m.find()) {
    System.out.println(m.group());
}

RegExp解释说:

[a-z][\w]+\.java:\d+

[a-z]>检查我们是否以字母开头......
[\ w] +> ...后跟一个字母,一个数字或一个下划线...
\ .java:> ...紧跟着字符串“.java:”...
\ d +> ...以一个或多个数字结尾

答案 4 :(得分:0)

的伪代码:

int p1 = location of '('
int p2 = location of ')', starting the search from p1
String s = extract string from p1 to p2

String.indexOf()String.substring()是您的朋友。

答案 5 :(得分:0)

试试这个:

String input = "hello this.is.a.test(MainActivity.java:47) (and some more text)";
Pattern p = Pattern.compile("[^\\)]*\\(([^\\)]*)\\).*");
Matcher m = p.matcher( input );
if(m.matches()) {
  System.out.println(m.group( 1 )); //output: MainActivity.java:47
}

如果有更多的文本,它还会在(和)之间找到文本的第一次出现。

请注意,在Java中,您通常会隐式包含^$的表达式(或至少具有相同的效果),即正则表达式必须与整个输入字符串匹配。因此,开头为[^\\)]*,最后为.*