从作为参数传递的字符串中删除重复的字符

时间:2013-08-17 20:20:45

标签: java while-loop

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

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

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

以下是我迄今为止尝试过的更新内容 - 抱歉。

3 个答案:

答案 0 :(得分:0)

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

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!
}

答案 1 :(得分: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"));

答案 2 :(得分:0)

查看this answer

你可能不明白这一点,但它完成了工作(它巧妙地使用了不允许重复值的HashSet)。

我认为你的老师可能正在寻找使用循环的解决方案 - 请看看William Morisson的答案。

祝你好运!