簡體   English   中英

Java字符串拆分,分隔符附加到demiliters之間的字符

[英]Java String Split with delimiters attached to the characters between demiliters

我喜歡String

Client Name:##USERNAME## Age:##AGE## xyzed

我想拆分是這樣的

[Client Name:][##USERNAME##][ Age:][##AGE##][ xyzed]

我試過這個正則表達式(?=(##(\\\\w+)##))它返回了

[Client Name:][##USERNAME## Age:][##AGE## xyzed]

因為在java中,look-behind不能使用可變長度,因此無法使用

(?=(##(\\w+)##))|(?<=(##(\\w+)##))

如果您對巨大的硬編碼上限感到滿意,這將有效:

(?=##\\w+##)|(?<=##\\w{1,1000}##)

(我也刪掉了一些多余的括號)

這個:

String string = "Client Name:##USERNAME## Age:##AGE## xyzed";
String regex = "(?=##\\w+##)|(?<=##\\w{1,1000}##)";
String[] arr = string.split(regex);
System.out.println(Arrays.asList(arr));

打印:

[Client Name:, ##USERNAME##,  Age:, ##AGE##,  xyzed]

測試

這是另一種選擇,但它可能對輸入過於具體:

(?=##\\w)|(?= )(?<=##)

它也有效

這應該工作正常,只涉及全局替換:

String Name = "Client Name:##USERNAME## Age:##AGE## xyzed";
String[] parts = Name.replaceAll(":##",":@##").replaceAll("## ",":##@ ").split("@");
System.out.println(Arrays.asList(parts));

打印:

[Client Name:, ##USERNAME:##,  Age:, ##AGE:##,  xyzed]

它的閱讀非常簡單,但它可能比Dukeling的答案要慢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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