[英]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()']
因此,基本上我現在需要的是一種對')。'進行拆分的方法,但僅對相關的'。'進行拆分。 使用split功能可以嗎? 還是我應該獲取所有')的位置。 然后手動拆分?
我不確定如何進行。 指針非常感謝。
您可以在正則表達式中使用正向后面:
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()]
正則表達式(?<=\\))\\.
匹配前面有一個點)
。
您實際上並不是在某些字符上分割字符串,而是在大字符串中識別模式。 因此,應該使用Matcher#find()
來查找與func(arg1, arg2, ...)
匹配的所有模式,而不是使用String#split()
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.