gpt4 book ai didi

java - 从Java中的文本文件中按升序排列字母

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

我在这段代码上得到了帮助,完全归功于创建者

我正在尝试创建一个 Java 类,该类显示一个字母在文本文件中出现的次数,并按升序显示它们,因此如果文本文件包含 Hello World,则输出将为

D is shown 1 time
E is shown 1 time
H is shown 1 time
L is shown 3 times
O is shown 2 times
R is shown 1 time
W is shown 1 time

但是,使用我拥有的代码,它确实显示字母以及它们显示的次数,但它们不是像上面所示那样分组在一起,而是显示如下:

E is shown 1 time
H is shown 1 time
L is shown 2 times
O is shown 1 time
W is shown 1 time
L is shown 1 time
O is shown 1 time
R is shown 1 time
D is shown 1 time

我希望修改的代码(如开头所述,不是我的),以便其输出与第一个示例类似

public class class1{

public static void main(String[] args) throws IOException {
try (Scanner in = new Scanner(new FileReader("example.txt"))) {
while (in.hasNext()) {
letterFrequency(in.next());
}
}
}

private static void letterFrequency(String input) {
Map<Character, Integer> counts = new HashMap<>();
for (char each : input.toCharArray()) {
if (Character.isLetter(each)) {
char upper = Character.toUpperCase(each);
counts.put(upper, counts.getOrDefault(upper, 0) + 1);
}
}
counts.entrySet().stream().forEach((entry) -> {
System.out.println(String.format(String.format("%s is shown %d "
+ "time%s", entry.getKey(), entry.getValue(),
entry.getValue() > 1 ? "s" : "")));
});
}
}

最佳答案

您的问题是您正在一次处理一个单词

您的计数算法没问题(输出顺序除外)。您的问题出在扫描仪上,它一次读取一个单词。

更改扫描仪以读取整个文件,并将其传递给您的计数方法。一种(偷偷摸摸的)方法是这样做:

Scanner in = new Scanner(new FileReader("example.txt")).useDelimiter("\\A")

它将分隔符设置为所有输入的开头,当然这种情况永远不会(再次)发生,因此它会一直读取到流的末尾。

使用“\\A”作为分隔符的一个有趣且方便的结果是,如果输入为空,则 hasNext()false,因此此更改也会自动干净地处理空文件。

您只需使用 TreeMap 而不是 HashMap 即可固定字母的输出顺序。

关于java - 从Java中的文本文件中按升序排列字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36730357/

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