【问题标题】:How to convert a string to a java list?如何将字符串转换为java列表?
【发布时间】:2013-12-22 16:12:10
【问题描述】:

我有一个这样的字符串:

"[1,2,3,4,5,6,7,8,9]"

我怎样才能把它变成List,可以是int列表或字符串列表:

[1,2,3,4,5,6,7,8,9]

我尝试使用 Gson:

List list = new Gson().fromJson(string, List.class);

它让我着迷:

[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]

我可以将 double 转换为 int,但我确信有更好的方法。

【问题讨论】:

    标签: java json string list gson


    【解决方案1】:

    Gson 默认使用Double 表示任何数值。你需要指定你想要Integer

    List<Integer> list = new Gson().fromJson(json, new TypeToken<List<Integer>>() {}.getType());
    System.out.println(list);
    

    打印

    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    TypeToken 是一种获取泛型类型的hack,以便 Gson 知道要使用什么。

    【讨论】:

    • 很好的解释 +1
    【解决方案2】:

    除了Gson,你还可以这样做:

    String yourString = "[1,2,3,4,5,6,7,8,9]";
    yourString = yourString.subString(1,yourString.length()-1) // get rid of '[' and ']'
    List<String> list = new ArrayList<String>(Arrays.asList(yourString.split(",")));
    

    【讨论】:

    • ^this,但是这种方法会更快/成本更低吗?
    • @yao 它会针对这个特定的用例。
    • 为什么这么多赞?!?!?!这显然是一个特定的用例解决方案。
    • 我只是尝试提供另一个简单的解决方案,我也更喜欢 Sotirios 的回答:)
    【解决方案3】:
    String s = "[1,2,3,4]";
    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher(s);
    List<Integer> integers = new ArrayList<Integer>();
    while (m.find()) {
        integers.add(Integer.parseInt(m.group()));
    }
    System.out.println(integers);
    

    【讨论】:

      猜你喜欢
      • 2021-07-28
      • 2014-07-19
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多