我有一个字符串,这是一个链接的进程调用,我需要在列表中获取各个进程,以便我可以处理各个进程。
例如。
如果我有
'funca("hello world").funcb("this.is.sparta").funcc()'
我想得到一个
的arraylist ['funca("hello world")' , 'funcb("this.is.sparta")' , 'funcc()']
现在,我无法将字符串拆分为'。'因为传递的参数也可以有'。'字符。我试过分裂')。'
,这最终会带来丑陋的分裂 ['funca("hello world"' , 'funcb("this.is.sparta"' , 'funcc()']
所以基本上我现在需要的是一种分解')的方法。',但只能在关联的'上进行分割。'。这可能与拆分功能有关吗?或者我应该获得所有')的位置。'然后手动拆分?
我不确定如何继续。指针非常赞赏。
答案 0 :(得分:3)
你可以在你的正则表达式中使用正面的lookbehind:
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()]
正则表达式(?<=\))\.
匹配前面带有)
的点。
答案 1 :(得分:0)
你并没有真正在一些角色上分割字符串,而是在一个大字符串中识别一个模式。因此,您应该使用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);