使用前一个字符在Java中拆分String

时间:2015-04-04 18:58:45

标签: java regex split

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

例如。

如果我有

'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()']

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

我不确定如何继续。指针非常赞赏。

2 个答案:

答案 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);