2
Pattern p = Pattern.compile("(.+)\\s(.+)\\s(.?)$");
Matcher m = p.matcher(line);
System.out.println("Method:");  
System.out.println(m.group(1));
System.out.println(m.group(2));

上記のコードは、この文字列を分割するために使用するコードです。

method(public, static, void) main(String[] args){

method(public, static, void)文字列とmain(String[] args)別の文字列を取得できるようにしたい。との{間にスペースが入っている可能性があります。){

これまでの私のコードはこれを行います:

Method:
method(public, static, void) main(String[]
args){ 

私は正規表現が得意ではありません。(私のコードは現在、最後の を処理していません{が、これを修正できます。) 問題は、行を希望どおりに分割できないことです。

4

3 に答える 3

1

Patternあなたは必要ありませんMatcher。の文字列に対してString#split()メソッドを使用し、配列の最初の 2 つの要素を取得する必要があります。split)

String str = "method(public, static, void) main(String[] args){";

String[] parts = str.split("\\)");

System.out.println(parts[0]);  // method(public, static, void
System.out.println(parts[1]);  // main(String[] args

しかし、あなたが見ることができる問題は、あなたの文字列には最後が含まれていないという)ことです.

配列要素に区切り文字を含めるには、正規表現で後読みを使用できます: - "(?<=\\))"。これで、文字列が分割され、empty character前に が付き)ます。

これはあなたが必要とするものです: -

String[] parts = str.split("(?<=\\))");  // split on empty character after )
System.out.println(parts[0]);
System.out.println(parts[1]);

出力: -

method(public, static, void)
 main(String[] args)
于 2012-12-18T19:01:32.473 に答える
1

これ

String str = "method(public, static, void) main(String[] args){";
Pattern pattern = Pattern.compile("\\p{Alnum}+\\([^)]*?\\)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.println(matcher.group());
}

次の出力が生成されます。

method(public, static, void)
main(String[] args)
于 2012-12-18T19:04:21.353 に答える
0

一致する場合:

/([^\(\)]+\([^\)]+\))([^\(\)]+\([^\)]+\))/

必要なものを正確に取得する必要があり$1$2

于 2012-12-18T19:10:11.333 に答える