一、Set与String互转

在处理JSON数据时,我发现想把数据取出来用set去重,然后toString后放回JSON,但是再取出来要转成Set时就出问题了。
这是一个用例:

JSONObject jsonObject = new JSONObject();
jsonObject.put("姓名", "张三,李四");
HashSet<Object> names = Sets.newHashSet(jsonObject.getString("姓名").split(","));
names.add("王五");
jsonObject.put("姓名", names);

这时候json中姓名的字段变成了
[李四, 张三, 王五]
如果用同样的方法取出来并放入Set中:

HashSet<String> names = Sets.newHashSet(StringUtils.strip(jsonObject.getString("姓名", "[]")).split(","));
names.add("王五");
System.out.println(names);

这时候打印出来的Set是:

[李四,  张三,  王五, 王五]

因为Set转String的时候会给字段前面加上空格,如果再给每个元素去空格,会觉得额外繁琐。
可以使用这种方法:

JSONObject jsonObject = new JSONObject();
jsonObject.put("姓名", "张三,李四");
HashSet<Object> names = Sets.newHashSet(jsonObject.getString("姓名").split(","));
names.add("王五");
jsonObject.put("姓名", StringUtils.join(names, ","));
names = Sets.newHashSet(jsonObject.getString("姓名").split(","));
names.add("王五");
System.out.println(names);

结果是:

[李四, 张三, 王五]

在插入json的时候不要直接转String插入,而是使用StringUtils.join,这样不会出现多余的空格和前后括号。

二、 String转list

String转list的时候很容易出现一个问题:

String listString = "张三,李四";
List<String> list = Arrays.asList(listString.split(","));
list.add("王五");

提示报错:

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(AbstractList.java:148)
	at java.util.AbstractList.add(AbstractList.java:108)

这是因为asList方法转出来的List为Arrays内部类ArrayList,而不是java.util.ArrayList,所以需要对list进一步转换操作

String listString = "张三,李四";
List<String> list = Arrays.asList(listString.split(","));
List<String> arrayList = new ArrayList<>(list);
arrayList.add("王五");
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐