-2

我有点困惑如何解决这个问题。userKeyword 作为上一部分代码的参数传递。我的任务是从输入的关键字中删除任何重复的字符(无论它是什么)。我们刚刚在课堂上完成了 while 循环,因此我们将不胜感激。

    private String removeDuplicates(String userKeyword){
        String first = userKeyword;

        int i = 0;
        while(i < first.length())
        {
            if (second.indexOf(first.charAt(i)) > -1){ 
            }    
            i++;
        return ""; 

这是我迄今为止尝试过的更新 - 对此感到抱歉。

4

3 回答 3

0

这是一个完美的使用场所java.util.Set,一个旨在容纳独特元素的结构。通过尝试将每个单词添加到集合中,您可以检查您以前是否看过它,如下所示:

static String removeDuplicates(final String str)
{
    final Set<String> uniqueWords = new HashSet<>();
    final String[] words = str.split(" ");
    final StringBuilder newSentence = new StringBuilder();
    for(int i = 0; i < words.length; i++)
    {
        if(uniqueWords.add(words[i]))
        {
            //Word is unique
            newSentence.append(words[i]);
            if((i + 1) < words.length)
            {
                //Add the space back in
                newSentence.append(" ");
            }
        }
    }
    return newSentence.toString();
}

public static void main(String[] args)
{
    final String str = "Words words words I love words words WORDS!";
    System.out.println(removeDuplicates(str)); //Words words I love WORDS!
}
于 2013-08-17T20:29:55.383 回答
0

为了将来参考,StackOverflow 通常要求您发布您拥有的内容,并寻求改进建议。

因为它不是一个活跃的一天,我很无聊,我已经为你做了这个。这段代码非常高效,并且没有使用高级数据结构。我这样做是为了让您更容易理解它。

请尝试理解我在做什么。学习是 StackOverflow 的目的。

我在代码中添加了注释以帮助您学习。

private String removeDuplicates(String keyword){
    //stores whether a character has been encountered before
    //a hashset would likely use less memory.
    boolean[] usedValues = new boolean[Character.MAX_VALUE];

    //Look into using a StringBuilder. Using += operator with strings
    //is potentially wasteful.
    String output = "";

    //looping over every character in the keyword...
    for(int i=0; i<keyword.length(); i++){
        char charAt = keyword.charAt(i);
        //characters are just numbers. if the value in usedValues array 
        //is true for this char's number, we've seen this char.
        boolean shouldRemove = usedValues[charAt];
        if(!shouldRemove){
            output += charAt;
            //now this character has been used in output. Mark that in 
            //usedValues array
            usedValues[charAt] = true;
        }
    }
    return output;
}

例子:

//output will be the alphabet.
System.out.println(removeDuplicates(
    "aaaabcdefghijklmnopqrssssssstuvwxyyyyxyyyz"));
于 2013-08-17T20:30:40.640 回答
0

看看这个答案

您可能不理解这一点,但它确实完成了工作(它巧妙地使用了不允许重复值的 HashSet)。

我认为您的老师可能正在寻找使用循环的解决方案 - 看看威廉莫里森对此的回答。

祝你好运!

于 2013-08-17T20:44:42.180 回答