帮我看看,这个HashSet里面怎么可以有重复的值
程序的目标是读取一段含有重复单词的字符串,然后程序过滤掉其中的重复的部分,返回一个没有重复单词的字符串,我用了两种方法来做,第一个是没有问题的如下:
public class Test{
public static void main(String[] args){
String str="你好 你好吗 销售 财务 你好 IT CSDN IT";
StringTokenizer st=new StringTokenizer(str);
Set set=new HashSet();
while(st.hasMoreTokens()){
set.add(st.nextToken());
}
StringBuffer sb=new StringBuffer();
for(Iterator i=set.iterator();i.hasNext();){
sb.append((String)i.next()).append(' ');
}
System.out.println(sb.toString());
}
}
运行结果为:财务 你好吗 你好 CSDN IT 销售
第二个方法用的是正则表达式
public class TestSplit {
public static void main(String[] args){
String str="你好 你好吗 销售 财务 你好 IT CSDN IT";
Set<String> set=new HashSet<String>();
Pattern p=Pattern.compile("\\b(.+)\\b");
Matcher matcher=p.matcher(str);
matcher.find();
for(int i =0; i<matcher.groupCount();i++){
set.add(matcher.group(i).toString());
}
System.out.println(set);
StringBuffer sb=new StringBuffer();
for(Iterator<String> i=set.iterator();i.hasNext();){
sb.append((String)i.next()).append(' ');
}
System.out.println(sb.toString());
}
}
运行结果为:[你好 你好吗 销售 财务 你好 IT CSDN IT]
你好 你好吗 销售 财务 你好 IT CSDN IT
也就是HashSet中有重复值,这个是什么情况?
[解决办法]
你的正则有问题,正则默认是贪婪匹配的。所以,你这里等于只匹配了一次,set里只有一个元素,就是“你好 你好吗 销售 财务 你好 IT CSDN IT”
改下正则
Set<String> set=new HashSet<String>(); Pattern p=Pattern.compile("\\b(.+?)\\b"); Matcher matcher=p.matcher(str); while(matcher.find()){ set.add(matcher.group().toString()); } System.out.println(set);
[解决办法]
如楼上所说,正则问题,还有个简单方法:String str = "你好 你好吗 销售 财务 你好 IT CSDN IT";
Set<String> set = new HashSet<String>();
String[] values = str.split(" ");
for (String string : values) {
set.add(string);
}
System.out.println(set);