简体   繁体   English

使用子字符串作为分隔符拆分或标记Java字符串

[英]Split or tokenise a java String using a substring as delimiter

How to split or tokenise a String in java not based on regex but based on a substring? 如何在Java中不基于正则表达式而是基于子字符串拆分或标记字符串?

String str = "{A={111={i=[a,b,c],ii=[e,f]}, 222={iii=[a,e]}}, B={333={i= [b,c]}}};

Now I want to tokenise or split the string based on substring "}}," and not regex "}},". 现在,我想基于子字符串“}}”而不是正则表达式“}}”对字符串进行标记化或拆分。

String str = "{A={111={i=[a,b,c],ii=[e,f]}, 222={iii=[a,e]}}, B={333={i= [b,c]}}}";
String[] split = str.trim().split("}},");
Arrays.stream(split).forEach(s-> System.out.println(s));

Although the String.split(String regex) function specifies that it takes a regular expression as a parameter, that does not stop you from escaping any special characters and splitting on a literal string. 尽管String.split(String regex)函数指定它使用正则表达式作为参数,但这不会阻止您转义任何特殊字符并拆分文字字符串。

To escape special characters in a regular expression, you can make use of the Pattern.quote(String s) function, or you can escape the individual characters using backslashes \\\\ : 要在正则表达式中转义特殊字符,可以使用Pattern.quote(String s)函数,也可以使用反斜杠\\\\来转义各个字符:

String escapedStr = Pattern.quote("}},");

String alternativeEscapedStr = "\\}\\},";

For the example you have provided however, you shouldn't need to escape anything: 对于您提供的示例,您不需要转义任何内容:

String str = "{A={111={i=[a,b,c],ii=[e,f]}, 222={iii=[a,e]}}, B={333={i= [b,c]}}}";

String[] splitStr = str.split(Pattern.quote("}},"));
System.out.println(Arrays.toString(splitStr));

String[] splitStr2 = str.split("}},");
System.out.println(Arrays.toString(splitStr2));

Output: 输出:

[{A={111={i=[a,b,c],ii=[e,f]}, 222={iii=[a,e],  B={333={i= [b,c]}}}]
[{A={111={i=[a,b,c],ii=[e,f]}, 222={iii=[a,e],  B={333={i= [b,c]}}}]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM