gpt4 book ai didi

java - 在大文件中查找重复项和排列

转载 作者:行者123 更新时间:2023-12-02 01:51:47 26 4
gpt4 key购买 nike

我有一个问题一直想解决。我试图做的是找到包含相同字符的条目对的数量(每一行都是一个条目)。

我的方法是阅读每一行,对行进行排序,然后与其他行进行比较。问题是我没有得到每一对重复项。

这是我的代码:

public static int countduplicates(String dbfilename) throws IOException {
int counter = 0;

Set<String> checker;
BufferedReader list = new BufferedReader( new FileReader( dbfilename ) );
String line;
TreeMap<String,Integer> map = new TreeMap<>();

while ( (line = list.readLine()) != null )
{
String newline= sorted(line);

System.out.println("Sorted: " + newline);

if (!map.containsKey(newline))
{
map.put(newline, 0);
}
else {
counter++;
map.put(newline, 1);
}
}



list.close();
return counter;

}
}

我明白为什么它不起作用,因为例如如果我有这样的输入文件:

BCDEFGH
ABACD
BDCEF
BDCAA
DBACA
DABACA
DABAC

排序后我会得到

BCDEFGH
AABCD
BCDEF
AABCD
AABCD (*)
AAABCD
AABCD

但是只会得到输出 3 而不是 6,因为 (*) 在应该加 2 的时候只会加 1 到计数器。你们中的任何人能给我任何关于如何继续解决这个问题的提示吗?

最佳答案

如果我没理解错的话首先,map 不允许有重复的键。我在你的代码中看到

 else 
{
counter++;
map.put(newline, 1);
}

无论条目出现了多少次,您始终将条目计数设置为 1。

例如,AABCD 在 map 中出现三次为 1。

"But will only get the output 3 instead of 6 because (*) will only add 1 to counter when it should add 2. "

那是因为我上面提到的, map 不允许重复的键。

BCDEFGH
AABCD
BCDEF
AABCD
AABCD
AAABCD
AABCD

将会

BCDEFGH -> 1 times
AABCD -> 4 times
BCDEF -> 1 times
AAABCD -> 1 times

您可以阅读有关 map 的更多信息 here.

关于java - 在大文件中查找重复项和排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52887852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com