0

我有以下代码

Pattern p = Pattern.compile("^get.*\\(");
Matcher m = p.matcher("getFieldAsDouble(String)");
if (m.find()) {
  System.out.println(m.group());
}

它返回getFieldAsDouble(

我如何只获取方法的文本名称而不是(

4

5 回答 5

4

而不是.*use [^(]*,它将获得任意数量的非字符(

Pattern p = Pattern.compile("^get[^(]*");
于 2013-06-03T22:00:49.117 回答
1

您可以使用正则表达式捕获组

Pattern p = Pattern.compile("(^get.*)\\("); // The () creates a capture group
Matcher m = p.matcher("getFieldAsDouble(String)");
if (m.find()) {
  System.out.println(m.group(1)); //Group 1
}
于 2013-06-03T22:00:22.020 回答
1

您必须将要匹配的东西括在括号中,您只是得到了完整的匹配项

Pattern p = Pattern.compile("^(get.*)\\(");

然后你必须要求匹配集合中的第二个项目,因为第一个是完整匹配

m.group(1)
于 2013-06-03T22:00:28.440 回答
1

你需要用括号括起你想要得到的东西,然后得到那个组:

Pattern p = Pattern.compile("^(get.*)\\(");
Matcher m = p.matcher("getFieldAsDouble(String)");

if (m.matches()) {
    System.out.println(m.group(1)); // Group 0 is the whole match
}
于 2013-06-03T22:01:22.023 回答
1

以下是您如何通过简单的一行来做到这一点:

String methodName = str.replaceAll("\\(.*", "");

这是一个测试:

System.out.println("getFieldAsDouble(String)".replaceAll("\\(.*", ""));

输出:

getFieldAsDouble
于 2013-06-03T22:01:37.143 回答