簡體   English   中英

用前一個字符在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()']

因此,基本上我現在需要的是一種對')。'進行拆分的方法,但僅對相關的'。'進行拆分。 使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM