Разделение или токенизация строки Java с использованием подстроки в качестве разделителя - PullRequest
0 голосов
/ 04 мая 2018

Как разделить или токенизировать строку в Java не на основе регулярного выражения, а на основе подстроки?

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

Теперь я хочу разбить или разбить строку на основе подстроки "}}, а не regex"}}, ".

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Хотя функция String.split(String regex) указывает, что она принимает регулярное выражение в качестве параметра, это не мешает вам экранировать любые специальные символы и разбивать текстовую строку.

Чтобы экранировать специальные символы в регулярном выражении, вы можете использовать функцию Pattern.quote(String s), или вы можете экранировать отдельные символы, используя обратную косую черту \\:

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

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

Однако, для приведенного вами примера вам не нужно ничего избегать:

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));

Выход:

[{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]}}}]
0 голосов
/ 04 мая 2018
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));
...