用前一个字符拆分 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()]
正则表达式 (?<=\))\.
匹配前面有 )
的点。
我有一个字符串,它是一个链式进程调用,我需要在列表中获取各个进程,以便我可以处理各个进程。
例如
如果我有
'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()]
正则表达式 (?<=\))\.
匹配前面有 )
的点。