如何将具有此格式的字符串转换为列表?
[[["Census_county_divisions","Populated_places_in_the_United_States","Populated_places_by_country","Geography_by_country","Geography_by_place","Geography","Main_topic_classifications"]],[["example","text","thanks"]],[["name","surname","age"]]]
从那个字符串我想有3个列表:
清单1:
"Census_county_divisions","Populated_places_in_the_United_States","Populated_places_by_country","Geography_by_country","Geography_by_place","Geography","Main_topic_classifications"
List 2:"example","text","thanks"
List 3:"name","surname","age"
我尝试过不同的方法来处理这个字符串,使用split,使用方法StringUtils.substringBetween,使用indexOf,使用regex,使用Json Parser ....我总是得到一个错误,这是一个更简单的方法吗?< / p>
评论:我没有看到这个字符串是Json格式,因为Json格式是“name”:“John”,如果我错了,请告诉我如何处理它作为Json。 ...
我也尝试过使用JsonParser并在线程“main”java.lang.IllegalStateException中使用Exception:不是JSON对象:
[[["Census_county_divisions","Popula
答案 0 :(得分:0)
我写这段代码:
拆分字符串
///The String to convert
String arg = "[[[\"Census_county_divisions\",....
[[\"example\",\"text\",\"thanks\"]],[[\"name\",\"surname\",\"age\"]]]";
System.out.println(arg);
////Replace
arg = arg.replace("[[[", "");
arg = arg.replace("]],[[", "|");
arg = arg.replace("]]]", "");
System.out.println(arg);
////Split
String[] array=arg.split("\\|");
List<String> list = Arrays.asList(array);
///Verify
for(String s: list) {
System.out.println(s);
}
此致
答案 1 :(得分:0)
这对我有用。我只修剪了开始和结束字符集,然后将它分成3个不同的字符串,这些字符串产生了列表。
str = new StringBuilder(str).replace(0, 4, "")
.reverse().replace(0, 4, "")
.reverse()
.toString();
String[] arr1 = str.split("\"\\]\\],\\[\\[\"");
List<String> list1 = Arrays.asList(arr1[0]
.split("\",\""));
List<String> list2 = Arrays.asList(arr1[1]
.split("\",\""));
List<String> list3 = Arrays.asList(arr1[2]
.split("\",\""));
答案 2 :(得分:0)
也许您可以使用Regex提取“[[”“]]”内的所有内容,并在每个组的开头和结尾修剪“[”和“]”。之后,您可以拆分结果并将其放入List。
这是一个简单的例子:
List<List<String>> lists = new ArrayList<>();
String string = "[[[\"Census_cunty_divisions\",\"Populated_places_in_the_United_States\",\"Populated_places_by_country\",\"Geography_by_country\",\"Geography_by_place\",\"Geography\",\"Main_topic_classifications\"]],[[\"example\",\"text\",\"thanks\"]],[[\"name\",\"surname\",\"age\"]]]";
Pattern pattern = Pattern.compile("\\[\\[(.*?)\\]\\]");
Matcher matcher = pattern.matcher(string);
String proccesed;
while (matcher.find()) {
for (int i = 1; i <= matcher.groupCount(); i++) {
proccesed = StringUtils.strip(matcher.group(i), "[");
proccesed = StringUtils.strip(proccesed, "]");
lists.add(Arrays.asList(proccesed.split(",")));
}
}
int i = 0;
for(List<String> stringList : lists){
System.out.printf("List # %s \n", i);
for(String elementOfList:stringList){
System.out.printf("Element %s \n", elementOfList);
}
i++;
}
根据初始字符串,您将拥有一个动态列表。
我已经使用org.apache.commons commons-text库去除匹配。
我希望它有用。
答案 3 :(得分:0)
我已经测试过丹尼尔肯尼迪的解决方案,而且效果很好! 我相信rohandm的解决方案也很好,但我还没有测试过。
非常感谢!你救了我!!!