基于{}开括号和大括号java拆分字符串



我有一个类似的字符串

String str = {"name":"SachText_singleLineText","value":"text project field"},{"name":"SachSlistSingle_singleSelect","value":"s1"},{"name":"SachYesno_boolean","value":["1"]}

我需要根据像这样的大括号来拆分它

[0] = {"name":"SachText_singleLineText","value":"text project field"}
[1] = {"name":"SachSlistSingle_singleSelect","value":"s1"}
[2] = {"name":"SachYesno_boolean","value":["1"]}

目前,这就是我正在尝试做的

String[] projectfieldsValueArray = str.split("\{\{,\}\}");

我在网上尝试了几个组合,但还是没能达到我的要求。在这种情况下需要使用有关正确正则表达式的帮助。

使用regex将非常困难。考虑这个字符串:

{"name":"{SachText},{singleLineText}","value":"text project field"},{"name":"{SachSlist},{Single_singleSelect}","value":"s1"}

存在"}"的子串,{quot;内引号,使它们成为名称本身的一部分,所以你不想拆分它们。

您的字符串看起来像JSON数组的元素。因此,将它们置于";["one_answers"]";并使用JSON解析器,如Jackson、GSon或Moshi,它将正确解析它们。

您可以尝试使用Pattern Matcher。

String key = "(\{.*?\})";
String str = //your string.;
Pattern pattern = Pattern.compile(key);
Matcher matcher = pattern.matcher(str);
if (matcher.find())
{
System.out.println(matcher.group(0));
}

我假设您的字符串可能是

String str = "{"name":"SachText_singleLineText","value":"text project field"},{"name":"SachSlistSingle_singleSelect","value":"s1"},{"name":"SachYesno_boolean","value":["1"]}";

如果您需要大括号之间的字符串,请使用regex[{}]如果你需要一个带大括号的拆分字符串,你可以在前面加上";{"和追加"}";

String[] arrOfStr = str.split("[{}]");
for(String a: arrOfStr) {
System.out.println(  a );
}

O/p:";name":"SachText_singleLineText"值":"文本项目字段";,"name":"SachSlistSingle_singleSelect"值":"s1〃;,"name":"SachYesno_boolean"值":["1"]

str取自Suvarn Banarjee,提示来自Mark Rotteveel:

String str = "{"name":"SachText_singleLineText","value":"text project field"},{"name":"SachSlistSingle_singleSelect","value":"s1"},{"name":"SachYesno_boolean","value":["1"]}";
String[] parts = str.split("(?<=\}),(?=\{)");

但是,对我来说,这看起来像JSON,所以通常最好使用JSON库,因为我很确定你还没有完成拆分。

最新更新