【问题标题】:Removing repeated characters, preserving order [duplicate]删除重复字符,保留顺序[重复]
【发布时间】:2013-11-28 15:35:00
【问题描述】:

我正在尝试编写一个接收String 并删除String 中的重复字符的代码。

String utenRepetisjon(String tekst) {

    String b;

    char[] tekstArray = tekst.toCharArray();
    char[] tilTekst = new char[tekstArray.length];

    for(int i=0; i<tekstArray.length; i++) {
        for(int j=0; j<tekst.length(); j++) {
            if(tekstArray[i] != tekst.charAt(j)) {
                tilTekst[i] = tekstArray[i];
            }
        }
    }
    return b = new String(tilTekst);
}

例如如果tekst = "aababbabbac",它应该返回"abc"。 到目前为止,我的代码只返回它给出的相同的 tekst..

【问题讨论】:

  • 您的代码应该如何工作? tilTekst 以与 tekst 相同的长度创建,这对您的问题没有意义,因为返回的字符串通常更小。

标签: java string


【解决方案1】:

尝试下一个:

String utenRepetisjon(String tekst) {
    String str = "";
    for(char ch : tekst.toCharArray()) {
        if (str.indexOf(ch) == -1) {
            str += ch;
        }
    }
    return str;
}

【讨论】:

  • 使用StringBuilder 或字符数组会更好。但它有效。
  • +1 获得优雅的解决方案。
  • 不错,简短的解决方案。但是当 tekst 很长时,它可能会遇到臭名昭著的字符串连接问题。 StringBuilder 不起作用,因为它没有 indexOf(char)。
  • 谢谢!这个做的工作:)
  • 建议:使用 StringBuilder 进行连接,并编写一个 helper-method 'contains(StringBuilder, char)'。
【解决方案2】:

这是代码。 使用哈希图

 String tekst = "aababbabbac";
    char[] testArray = tekst.toCharArray();
    Hashtable<String, String> hash = new Hashtable<String, String>();
    for (char c : testArray) {
        if (!hash.containsKey("" + c)) {
            hash.put("" + c, "1");
        }
    }
    String dups = "";
    for (String key : hash.keySet()) {
        dups+=key;
    }
    System.out.println(dups);

【讨论】:

  • 打印的是 bac 而不是 abc。您需要保持原始单词中字母的顺序(而不是 downvoter)。
  • 是的。我以为他只想过滤重复项……感谢您的否定!!
  • 顺便说一句,我不是反对者。
  • 有人同意我的评论吗?
  • 更改为 java.util.LinkedHashSet 以保持插入元素的顺序。
猜你喜欢
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
相关资源
最近更新 更多