【问题标题】:How to convert a String array to List? [duplicate]如何将字符串数组转换为列表? [复制]
【发布时间】:2023-03-07 09:46:01
【问题描述】:

我有一个 Java 项目,它查询一个返回 String 的 API,例如:

"['test1', 'test2', 'test3']" // the array is a string

所以基本上一个数组对象被解析为String。我想知道将其转换为真正的 Java List 的最佳方法。

【问题讨论】:

  • 由于该字符串看起来像 Json,我建议使用 Json 解析器。有很多库可供您使用。
  • 对不起,“数组”本身就是一个字符串
  • @Thomas 它类似于 JSON,但不是 JSON。
  • JSON 需要双引号,因此必须首先替换单引号。不过,您需要确保您的值从不包含任何实际的双引号。
  • 这里没有足够的信息来提出建议。你所拥有的是一个例子,你需要一个定义。子字符串总是在单引号之间吗?是否允许空字符串或空数组?元素总是字符串吗?是否有要处理的转义字符?这只是我想出的问题,毫无疑问,如果我花 5 分钟或更长时间,我可以想出更多。你需要一个定义才能做出决定。我假设您无法控制 API 返回的内容,因此您必须知道他们是如何定义的。

标签: java


【解决方案1】:

['test1', 'test2', 'test3'] 是一个 JSON 数组,因此可以使用 GsonJackson 进行解析。尽管 JSON 通常要求在 String 值周围使用双引号,但 Gson 仍会解析单引号:

String json = "['test1', 'test2', 'test3']";
Type listType = new TypeToken<List<String>>() {}.getType();
List<String> list = new Gson().fromJson(json, listType);
System.out.println(list); // [test1, test2, test3]

或者,您可以使用正则表达式。假设值不能包含转义撇号\' 符号:

String text = "['test1', 'test2', 'test3']";
Pattern pattern = Pattern.compile("'([^']+)'");
Matcher matcher = pattern.matcher(text);
List<String> list = new ArrayList<>();
while (matcher.find()) {
    list.add(matcher.group(1));
}
System.out.println(list); // [test1, test2, test3]

【讨论】:

    猜你喜欢
    • 2019-10-16
    • 2021-06-11
    • 2019-03-08
    • 2019-03-01
    • 2012-05-23
    • 2015-08-01
    • 1970-01-01
    • 2015-08-17
    相关资源
    最近更新 更多