3

文字列 userKeyword は、ユーザーのキーボード入力から取得されます。重複する文字を削除してこの文字列を返すメソッドを作成しようとしました。

このタスクを完了するには charAt と indexOf を使用することをお勧めします。したがって、最も簡単な方法は、アルファベットを調べて、indexOf にキーワードに含まれる文字を選択させ、それらを連結させることです。以下でこれを実行しようとしましたが、成功しませんでした。

これを達成するためのより簡単な、またはより直接的な方法はありますか?

コードが機能しないのはなぜですか? (26 'a's のリターンが得られます)

public static final String PLAIN_ALPHA = "abcdefghijklmnopqrstuvwxyz";

private String removeDuplicates(String userKeyword){

    int charLength = PLAIN_ALPHA.length();
    int charCount = 0;
    char newCharacter = PLAIN_ALPHA.charAt(charCount);
    String modifiedKeyword = "";

    while (charCount < charLength){

            if (userKeyword.indexOf(newCharacter) != -1);{
            modifiedKeyword = modifiedKeyword + newCharacter;
            }

            charCount = charCount + 1;
    }

    return modifiedKeyword;
}

    while (charCount < charLength){

            newCharacter = PLAIN_ALPHA.charAt(charCount);

            if (userKeyword.indexOf(newCharacter) != -1);{
            modifiedKeyword = modifiedKeyword + newCharacter;
            }

            charCount = charCount + 1;

while ループ内で newCharacter の割り当てをシフトすると、重複が省略された userKeyword ではなく、PLAIN_ALPHA とまったく同じ出力が得られます。私は何を間違っていますか?

4

2 に答える 2

5

たった1行でそれを行うことができます:

private String removeDuplicates(String userKeyword){
    return userKeyword.replaceAll("(.)(?=.*\\1)", "");
}

これは、キャプチャされた文字への後方参照の「先読み」を使用して、文字列の後半に再び現れるすべての文字を空白に置き換える (つまり、削除する) ことによって機能します。

于 2013-08-10T20:37:34.840 に答える
3

あなたはこれを試すことができます...

private String removeDuplicates(String userKeyword){

        int charLength = userKeyword.length();
        String modifiedKeyword="";
        for(int i=0;i<charLength;i++)
            {
             if(!modifiedKeyword.contains(userKeyword.charAt(i)+""))
                 modifiedKeyword+=userKeyword.charAt(i);
            }
        return modifiedKeyword;
    }
于 2013-08-10T09:55:24.573 に答える