如何从Java中删除字符串中的重复字符

时间:2013-10-04 14:32:58

标签: java

我只想获得删除重复项的帮助。到目前为止我有这个,但它不会删除或删除多次出现的单词。

 void antUnikOrd() {
int unikCount = 0;
String c = "ahfuwa";
for(int i = 0; i<a.length;i++) {


    for(int j= 0;j<a.length;j++) {  
    if(a[i].equals(a[j])) {         
        unikCount++;
    }
    if(unikCount>1) {
        a[j] = c;
        unikCount = 1;

    }       
      unikCount = 0;            
    }

    for( i = 0;i<a.length;i++) {
    //if(a[i] != " ") {
    System.out.println(a[i]);
    //  }
    }
}

5 个答案:

答案 0 :(得分:1)

如果你不被允许使用额外的内存,以及非常方便的Java套件,那么你可以做一个让你想做的事情,即O(NlogN),而不是你提出的明显的O(N ^ 2)解决方案

1 - Sort the array of words (Arrays.sort(~) will do the trick in O(nlogn)).
2 - For each word in the sorted array look if the next one is equal. (one loop)
    a - TRUE = set to delete current word from array (not the next one, keep that one)
    b - FALSE = go on to next
3 - Write to file by ignoring the detect duplicates. (one more loop)

解释第2点:

array = [ a, b, b, c, d, d, d ]
ITERATIONS
- a != b ->  [ a, b, b, c, d, d, d ] index = 0
- b == b ->  [ a, X, b, c, d, d, d ] index = 1
- ...
- d == d ->  [ a, X, b, c, X, d, d ] index = 4
- d == d ->  [ a, X, b, c, X, X, d ] index = 5
- d is last so we stop

现在我们过滤Xs:

[a, b, c, d]

这实际上是O(nlogn + 2n),可以简化为O(nlogn)。

祝好运,但应该相当简单。 如果你不能使用Arrays.sort(〜)实现你自己的排序函数,我建议使用QuickSort或MergeSort,因为它们决定了这个解决方案的整体性能。

答案 1 :(得分:0)

您可以将元素存储到自动删除重复的HashSet中

答案 2 :(得分:0)

您可以将字符串添加到HashSet中,它会删除重复项。

答案 3 :(得分:0)

当你替换文件中的文本时,我经常将整个文件读入内存,做我想做的任何操作,然后将它们全部写回文件。我不喜欢分发答案,所以我会给你类似的东西。例如,在伪代码中:

public void removeWord(String word)
{
    fileReader := FileReader(the file to read)
    lines := Java HashSet object
    for every line in the file {
        // Cycle through each line and load into the HashSet
        lines.add(current line)
    }

    // You now have a whole bunch of different lines.

    fileReader.close();
    // Unlock the file.

    fileWriter := FileWriter(the file to write in overwrite mode)

    for every line in lines
    {
         fileWriter.write(line)
    }
    fileWriter.flush() // To be safe..
    fileWriter.close() // to prevent memory leaks.

}

答案 4 :(得分:0)

问题有点不清楚,但我会假设您希望阅读文件的内容,删除重复项并将其写回文件。

获得文件内容后(请参阅此问题以获取指南:Reading a plain text file in Java),然后从列表中删除重复项的最简单方法是将它们放入集合中:

List<String> lines = readFromFile(); // complete this method
Set<String> uniqueLines = new HashSet<String>(lines);

一旦您拥有一组独特的行,您只需将它们写回文件(请参阅此问题以获取指南:How do I create a file and write to it in Java?