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){
我对正则表达不擅长。 (我的代码目前没有处理最后一个{
,但我可以解决这个问题。)问题是我无法按照我想要的方式划分界限。
答案 0 :(得分:1)
此处您不需要Pattern
和Matcher
。您应该使用String#split()
方法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)
输出: -
{{1}}
答案 1 :(得分: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)
答案 2 :(得分:0)
如果您匹配:
/([^\(\)]+\([^\)]+\))([^\(\)]+\([^\)]+\))/
您应该在$1
和$2