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);
}
}
上面的程序给出了一个输出,比如“之后的某个方形拳击手”。上面的代码出了什么问题。
答案 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]
答案 1 :(得分:2)
首先,你没有遍历所有的char数组,你的循环 应该是:
for(int i=0;i < (c1.length);i++)
其次,你必须从循环中初始化索引k, 第三,这种操作不是可交换的,这意味着
getCommon(String s1, String s2)
和
getCommon(String s2, String s1)
不会给出相同的结果,
最后,因为你试图得到普通的字母,所以为什么不呢 在找到任何类似的字符之后立即打破内部循环 其他阵列?