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){ 

我不擅长正则表达式。(我的代码目前不处理 last {,但我可以解决这个问题。)问题是我无法让线路按照我想要的方式拆分。

4

3 回答 3

1

你不需要PatternMatcher这里。您应该对字符串使用String#split()方法on ,并获取数组的前两个元素:-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

但是,您可以看到的问题是,您的字符串不会包含最后一个)

要在数组元素中包含分隔符,您可以在您的正则表达式上使用look-behind: - "(?<=\\))"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 回答