将字符串格式转换为列表 - 它不是json格式字符串

时间:2018-05-07 20:53:00

标签: java string arraylist

如何将具有此格式的字符串转换为列表?

[[["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

4 个答案:

答案 0 :(得分:0)

我写这段代码:

  1. 删除[[[,]]]字符串
  2. 替换]],[[for |字符
  3. 拆分字符串

    ///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);
    }
    
  4. 此致

答案 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的解决方案也很好,但我还没有测试过。

非常感谢!你救了我!!!