这是我到目前为止所做的:
import java.util.*;
class kl {
public static void main(){
StringBuffer sbuffer = new StringBuffer();
Scanner input = new Scanner(System.in);
System.out.println("Enter a string");
sbuffer.append(input.nextLine());
int j;
for(int i=0; i<sbuffer.length()-1; i++){
for(j=0; j<sbuffer.length()-1; j++){
if(i==j)
continue;
else if (sbuffer.charAt(i)==(sbuffer.charAt(j)))
sbuffer.deleteCharAt(i);
}
}
System.out.println(sbuffer);
}
}
例如,如果用户输入:&#34;妈妈&#34;,则输出应为&#34; mo&#34; (案件并不重要)。重要的是字符出现的顺序,因此&#34; om&#34;不是我寻求的。上面的代码有效,但输出不对。我已经考虑了很多,但却无法弄清楚是什么问题。感谢任何帮助,谢谢。
答案 0 :(得分:1)
您的比较区分大小写,因为'M'!='m'。
要进行不区分大小写的比较,您可以(例如)将它们都更改为小写:
else if (Character.toLowerCase(sbuffer.charAt(i))==Character.toLowerCase(sbuffer.charAt(j)))
如果您希望将字符保留在较低的索引处,请更改
sbuffer.deleteCharAt(i);
到
sbuffer.deleteCharAt(j);
j--; // this is important, since after removing a character, the following
// characters are shifted to the left
哦,还有一件事,你正在跳过最后一个角色。将你的循环改为:
for(int i=0; i<sbuffer.length(); i++){
for(j=i+1; j<sbuffer.length(); j++){
总结:
for(int i=0; i<sbuffer.length(); i++){
for(j=i+1; j<sbuffer.length(); j++){
if (Character.toLowerCase(sbuffer.charAt(i))==Character.toLowerCase(sbuffer.charAt(j))) {
sbuffer.deleteCharAt(j);
j--;
}
}
}
System.out.println(sbuffer);
答案 1 :(得分:1)
另一种方法,
String str = "Mom";
Set<Character> set = new LinkedHashSet();
for (int i = 0; i < str.length(); i++) {
set.add(Character.toLowerCase(str.charAt(i)));
}
StringBuilder sb = new StringBuilder();
for (Character character : set) {
sb.append(character);
}
System.out.println("Output : "+sb.toString());