使用 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);
我正在尝试比较 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);