使用 StringBuilder 删除字符串中的重复字符

Removing duplicate character in string using StringBuilder

我正在尝试比较 2 个字符串并使用 StringBuilder 删除重复项..但是当我 运行 这段代码时..它会删除找到的第一个重复项然后退出循环...不删除第二个..

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

您的代码不起作用,因为每次从 StringBuilder 中删除一个字符时,StringBuilder 的长度都会减少。并且所有字符的索引也会发生变化。

所以不要直接在循环中删除字符,而是用其他符号(此处0)替换要删除的字符,然后删除它或者不打印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));
    }
} 

也不需要在 for 循环中每次都将 StringBuilder 转换为 String

试试下面的代码。 例如 字符串名称 1 = "alpha"; 字符串名称 2 = "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);