创建一个新字符串,该字符串将包含来自java中其他两个字符串的常用字母

时间:2014-02-01 06:02:22

标签: java

public class StringEx {

public static void main(String[] args){

    String s1 ="abcc";
    String s2 = "cbaa";

    getCommon(s1,s2);
}

private static void getCommon(String s1, String s2) {
    char[] c1 = s1.toCharArray();
    char[] c2 = s2.toCharArray();

    char[] commonAry = new char[10];

    for(int i=0;i < (c1.length)-1;i++){
    for(int j=0;j<(c2.length)-1;j++){

        if(c1[i]==c2[j]){
            int k=0;
            commonAry[k]=c1[i];
            k++; 
        }
    }
    }

    System.out.println(commonAry);

}

}

上面的程序给出了一个输出,比如“之后的某个方形拳击手”。上面的代码出了什么问题。

2 个答案:

答案 0 :(得分:4)

使用Set<character> retainAll()方法获取两个String

之间的交集
public static void getCommon(String s1,String s2){


         char[] s1Array = s1.toCharArray();  
         char [] s2Array = s2.toCharArray();  


     Set<Character>s1CharSet = new HashSet<Character>();  
     Set<Character>s2CharSet = new HashSet<Character>();  

     for(char c:s1Array){  
         s1CharSet.add(c);  
     }  

     for(char c: s2Array){  
         s2CharSet.add(c);  
     }  

     s1CharSet.retainAll(s2CharSet);  

     if(s1CharSet.size()==0){  
        System.out.println("There are no common characters between the two strings");  
     }  

     else{  
         System.out.println(s1CharSet);  
     }  


     }  

<强>输出

  [b, c, a]

Demo

答案 1 :(得分:2)

首先,你没有遍历所有的char数组,你的循环     应该是:

for(int i=0;i < (c1.length);i++)

其次,你必须从循环中初始化索引k,     第三,这种操作不是可交换的,这意味着

getCommon(String s1, String s2)

getCommon(String s2, String s1)

不会给出相同的结果,

最后,因为你试图得到普通的字母,所以为什么不呢         在找到任何类似的字符之后立即打破内部循环         其他阵列?