我正在尝试比较2个字符串并使用StringBuilder删除重复项。但是当我运行此代码时...删除找到的第一个副本然后退出循环...不删除第二个.. < / p>
String name1 = "alpha";
String name2 = "delta";
name1 = name1.toLowerCase();
name2 = name2.toLowerCase();
StringBuilder sb1 = new StringBuilder(name1);
StringBuilder sb2 = new StringBuilder(name2);
for(int i=0; i<sb1.length();i++)
{
for(int j=0; j<sb2.length(); j++)
{
if(sb1.charAt(i) == sb2.charAt(j))
{
name1 = sb1.deleteCharAt(i).toString();
name2 = sb2.deleteCharAt(j).toString();
}
}
}
System.out.println(name1);
System.out.println(name2);
输出:
lpha
delt
答案 0 :(得分:1)
您的代码无效,因为每次删除StringBuilder
StringBuilder
长度减少的字符时。并且所有角色的索引也会发生变化。
所以不要直接在循环中删除字符,而是使用其他符号(此处为0
)替换要删除的字符,然后将其删除或只是不要打印{ {1}}。
请尝试以下代码:
0
每次String name1 = "alpha";
String name2 = "delta";
name1 = name1.toLowerCase();
name2 = name2.toLowerCase();
StringBuilder sb1 = new StringBuilder(name1);
StringBuilder sb2 = new StringBuilder(name2);
for(int i=0; i<sb1.length();i++)
{
for(int j=0; j<sb2.length(); j++)
{
if(sb1.charAt(i) == sb2.charAt(j))
{
sb1.replace(i, i+1, "0");
sb2.replace(j,j+1,"0");
}
}
}
String s = sb1.toString();
String t = sb2.toString();
for(int i=0;i<s.length();i++){
if(s.charAt(i)!='0'){
System.out.print(s.charAt(i));
}
}
System.out.println();
for(int i=0;i<s.length();i++){
if(t.charAt(i)!='0'){
System.out.print(t.charAt(i));
}
}
循环中也无需将StringBuilder
转换为String
。
答案 1 :(得分:0)
尝试以下代码。 例如 String name1 =“alpha”; String name2 =“delta”;
输出
“ph” 的 “DET”
String name1 = "alpha";
String name2 = "delta";
name1 = name1.toLowerCase();
name2 = name2.toLowerCase();
StringBuilder sb1 = new StringBuilder(name1);
StringBuilder sb2 = new StringBuilder(name2);
ArrayList<Character> duplicateChars = new ArrayList<>();
for(int i=0; i<sb1.length();i++)
{
/*For Finding duplicate in first string*/
for(int j=i+1; j<sb1.length(); j++)
{
if(sb1.charAt(i) == sb2.charAt(j))
{
duplicateChars.add(sb1.charAt(i));
}
}
/*For Finding duplicate in first and second string*/
for(int j=i+1; j<sb1.length(); j++)
{
if(sb1.charAt(i) == sb2.charAt(j))
{
duplicateChars.add(sb1.charAt(i));
}
}
}
for(int i=0; i<sb2.length();i++)
{
/*For Finding duplicate in second string only*/
for(int j=i+1; j<sb2.length(); j++)
{
if(sb2.charAt(i) == sb2.charAt(j))
{
duplicateChars.add(sb2.charAt(i));
}
}
}
for(Character character : duplicateChars){
name1 = name1.replace(character.toString(), "");
name2 = name2.replace(character.toString(), "");
}
System.out.println(name1);
System.out.println(name2);