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

时间:2016-05-30 16:59:11

标签: java string stringbuilder string-comparison

我正在尝试比较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

2 个答案:

答案 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);