用前一个字符拆分 Java 中的字符串

Split String in Java with on previous character

我有一个字符串,它是一个链式进程调用,我需要在列表中获取各个进程,以便我可以处理各个进程。

例如

如果我有

'funca("hello world").funcb("this.is.sparta").funcc()'

我想获得一个包含

的数组列表

['funca("hello world")' , 'funcb("this.is.sparta")' , 'funcc()']

现在,我无法拆分“.”上的字符串因为传递的参数也可以有 '.'特点。我试着在 ') 上拆分。但这最终导致

的丑陋分裂

['funca("hello world"' , 'funcb("this.is.sparta"' , 'funcc()']

所以基本上我现在需要的是一种拆分 ').' 的方法,但只拆分关联的 '.'。拆分功能可以吗?或者我应该得到所有 ') 的位置。然后手动拆分?

我不确定如何进行。不胜感激。

您并不是真的在某个字符上拆分字符串,而是在识别一个大字符串中的模式。因此,您不应使用 String#split(),而应使用 Matcher#find() 来查找与 func(arg1, arg2, ...) 匹配的所有模式。该模式将是这样的:

\w+\([^)]*\)

代码:

String str= "funca(\"hello world\").funcb(\"this.is.sparta\").funcc()";
Matcher matcher = Pattern.compile("\w+\([^)]*\)").matcher(str);

List<String> matchedFunction = new ArrayList<String>();
while (matcher.find()) {
  matchedFunction.add(matcher.group());
}

System.out.println(matchedFunction);

您可以在您的正则表达式中使用积极的回顾:

String text = "funca(\"hello world\").funcb(\"this.is.sparta\").funcc()";
String[] split = text.split("(?<=\))\.");
System.out.println(Arrays.toString(split));

输出:

[funca("hello world"), funcb("this.is.sparta"), funcc()]

正则表达式 (?<=\))\. 匹配前面有 ) 的点。