使用集合交叉2个数组

时间:2014-01-11 12:22:58

标签: java arrays set

我的要求是如果我有2个字符串,我应该得到2个字符串的交集 - 意味着返回字符串的公共元素而没有重复。

我的方法是:

String str1="Character";
String str2="National";

Set<Character> set1=new HashSet<Character>();
Set<Character> set2=new HashSet<Character>();

for(char c:str1.toLowerCase().toCharArray()){
    set1.add(c);
}

for(char c:str2.toLowerCase().toCharArray()){
    set2.add(c);
}

Set<Character> inter=new HashSet<Character>(set1);
Set<Character> union=new HashSet<Character>(set1);

inter.retainAll(set2);
union.addAll(set2);

现在交集包含交集和union包含union:

集合的交集:[t,a] 集合联盟:[t,e,c,r,a,n,o,l,h,i]

但我想将这些集合转换回字符串为“ta”和“tecranolhi”。

我正在使用String arr1[]=inter.toArray(new String[0]);,但它会出错。

**Exception in thread "main" java.lang.ArrayStoreException: java.lang.Character
        at java.util.AbstractCollection.toArray(Unknown Source)
        at StringInter.main(StringInter.java:22)**

有人可以澄清一下吗?

3 个答案:

答案 0 :(得分:3)

正如我所说,创建一个StringBuilder,遍历Set并附加每个字符。最后,请致电sb.toString()并将此结果分配回您的String变量。

这里也是一个解决方案:

String s = inter.stream().collect(StringBuilder::new, 
                                  StringBuilder::append,
                                  StringBuilder::append).toString();

答案 1 :(得分:2)

StringBuilder builder = new StringBuilder();
for (Character c : inter) {
    builder.append(c.charValue());
}
String interAsString = builder.toString();

答案 2 :(得分:0)

请参阅下面的代码段:

StringBuffer b = new StringBuffer();
Iterator i = inter.iterator();
while(i.hasNext())
{
  b.append(i.next().toString());
}
String interString = b.toString();

现在,interString将拥有您想要的。希望这会有所帮助。