尝试在Java中仅打印输入单词中的每个字符一次

时间:2015-11-29 08:45:36

标签: java

这是我到目前为止所做的:

   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;不是我寻求的。上面的代码有效,但输出不对。我已经考虑了很多,但却无法弄清楚是什么问题。感谢任何帮助,谢谢。

2 个答案:

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