次のコードがあります
Pattern p = Pattern.compile("^get.*\\(");
Matcher m = p.matcher("getFieldAsDouble(String)");
if (m.find()) {
System.out.println(m.group());
}
戻るgetFieldAsDouble(
メソッドの代わりにテキスト名のみを取得するにはどうすればよいです(
か??
.*
useの代わりに[^(]*
、そうでない任意の数の文字を取得します(
。
Pattern p = Pattern.compile("^get[^(]*");
正規表現キャプチャ グループを使用できます
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
}
一致するものを括弧で囲む必要があります。完全な一致が返されるだけです
Pattern p = Pattern.compile("^(get.*)\\(");
次に、最初のアイテムが完全一致であるため、一致のコレクションの 2 番目のアイテムを要求する必要があります。
m.group(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
}
これを 1 行で行う方法は次のとおりです。
String methodName = str.replaceAll("\\(.*", "");
ここにテストがあります:
System.out.println("getFieldAsDouble(String)".replaceAll("\\(.*", ""));
出力:
getFieldAsDouble