我从数据库接收数据作为一串项目,例如"Nike, Adidas, Reebok"
String data = "Nike, Adidas, Reebok";
我有一个算法,它使用下面显示的方法接收列表:
itemSetList.add(new HashSet<>(Arrays.asList("Nike", "Adidas","Reebok")));
变量itemSetList
的格式为:
List<Set<String>> itemsetList;
初始化为:
itemSetList = new ArrayList<>();
如何将字符串data = "Nike, Adidas, Reebok"
中获取的值更改为"Nike", "Adidas", "Reebok"
形式,以便将其添加到itemSetList中?
答案 0 :(得分:2)
您可以使用分隔符,\\s?
拆分输入字符串,用引号包裹每个鞋子,然后使用生成的数组形成一个集合。
String data = "Nike, Adidas, Reebok";
String[] shoes = data.split(",\\s?");
for (int i=0; i < shoes.length; ++i) {
shoes[i] = "\"" + shoes[i] + "\"";
}
Set<String> shoesSet = new HashSet<String>(Arrays.asList(shoes));
然后按计划使用该集:
itemSetList.add(shoesSet);
但是,我觉得您可能正在处理JSON或其他类似的数据,在这种情况下,您可能应该使用可自动处理引号的解析器。
答案 1 :(得分:2)
尝试将split(",")
字符串添加到String Array
,然后将每个trim()
-ed String
添加到HashSet
对象,稍后您可以添加{ {1}}反对HashSet
List<Set<String>>
或者如果您想要更短的版本,
请注意,import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Main {
public static void main(String[] args) throws Exception {
String data = "Nike, Adidas, Reebok";
String[] items = data.split(",");
List<Set<String>> itemsetList = new ArrayList<>();
Set<String> hashSet = new HashSet<String>();
for (String item : items)
hashSet.add(item.trim());
itemsetList.add(hashSet);
for (Set<String> set : itemsetList)
{
for (String string : set)
System.out.println(string);
}
}
}
会在逗号后面跟一个空格split(",\\s")
。这与,
后跟split(",")
相同。
trim()
答案 2 :(得分:0)
您可以在将数据添加到列表时拆分数据:
itemSetList.add(new HashSet<>(Arrays.asList(data.split(","))));
答案 3 :(得分:0)
我真的怀疑返回的字符串是数据库中单个字段的内容。它看起来更像某种聚合。
如果有可能该列表中的元素数量发生变化,我是对的
因此,我也怀疑List<Set<String>> itemsetList;
是在Java程序中存储这些值的适当结构。
然而我的建议是通过将值列表拆分为SQL语句中的各个列来解决数据库方面的这个问题。
这将为每个结果行提供一个单独的名称(这是我所期望的),或者它为每个结果行提供一个固定数量的列,您可以轻松地将其放入HashSet。
我知道其他人的建议实施起来的努力较少,但从长期来看,从一开始就花费一些时间在适当的数据结构上。