【发布时间】:2020-03-30 03:55:27
【问题描述】:
我要求编写一个程序来删除字符串中的重复字母 **注意:大写和小写字母被认为是重复的。 我编写了代码,它适用于所有没有空格的输入,当一个字符串带有空格时,它会显示错误。 我必须只使用循环和数组,没有额外的函数或哈希, 这是我几乎可以工作的代码:
case 2:
System.out.println("Give the string input");
String original=reader.next();
char[] charts=original.toCharArray();
int length=charts.length;
for (int i=0; i<length; i++){
for (int j=i+1; j<length; j++){
if(charts[i]==charts[j]||charts[i]+32==charts[j] ||charts[i]-32==charts[j]){
int temp=j; //duplicate element index
for (int k=temp; k<length-1; k++){ //delete shifting elements to left.
charts[k]=charts[k+1];
}//inner inner for
j--;
length--; // reduce char array length because we removed a character
}//if
}//inner for
}//for
String CleanString= new String(charts); //new string without repeated chars
CleanString=CleanString.substring(0,length); //set its length
System.out.println("New str = "+CleanString);
break;
【问题讨论】:
-
你能提供任何它失败的具体输入吗?
-
问题是您使用的是
next()而不是nextLine(),它只读取一个令牌。一个标记基本上是文本,直到一个空格,所以一个单词。要阅读完整的输入,请使用nextLine()。 -
"当一个字符串带有空格时,它会显示错误。" - 什么错误?
-
if(charts[i]==charts[j]||charts[i]+32==charts[j] ||charts[i]-32==charts[j])- 这会将某些标点符号视为与某些小写字母“相同”。请改用Character.toLowerCase(a) == Character.toLowerCase(b) || Character.toUpperCase(a) == Character.toUpperCase(b)。 -
您可以为自己节省一行:
String cleanString = new String(charts, 0, length);。
标签: java string duplicates