从一个字符串中获取所有字符及其数量

4
在Java中,我如何获取字符串中出现的所有字符列表及其出现次数?比如说,我们有一个字符串"I am really busy right now",那么应该得到以下结果:i-2,a-2,r-2,m-1等。

1
定义“字符”。它是一个32位的Unicode代码点吗?这可能会有所不同。 - President James K. Polk
这可以作为非常简单的代码卡塔来使用:) - Gabriel Ščerbák
4个回答

6
只需将每个字符及其计数映射到一起。使用String#toCharArray()可以获取 String 的字符数组,然后使用增强型for循环进行循环遍历。在每次迭代中,从映射中获取计数,如果不存在则设置并将其递增1并放回映射中。非常简单明了。
以下是一个基本的启动示例:
String string = "I am really busy right now";
Map<Character, Integer> characterCounts = new HashMap<Character, Integer>();
for (char character : string.toCharArray()) {
    Integer characterCount = characterCounts.get(character);
    if (characterCount == null) {
        characterCount = 0;
    }
    characterCounts.put(character, characterCount + 1);
}

要了解更多关于地图的内容,请查看Sun教程
你说这是“为一个项目”,但它却是一个典型的作业问题,因为它非常基础,在一本不错的Java书籍/教程的前几章中就有涉及。如果你是Java新手,我建议你通过Sun基础教程来学习。

一个字符不再是一个字符了,不幸的是。 - President James K. Polk

0

我不确定您的确切需求,但似乎您想要计算出现次数而不考虑大小写,也可能忽略空格等字符。因此,您可能需要像这样的东西:

String initial = "I   am really   busy  right now";

String cleaned = initial.replaceAll("\\s", "") //remove all whitespace characters
        .toLowerCase(); // lower all characters

Map<Character, Integer> map = new HashMap<Character, Integer>();
for (char character : cleaned.toCharArray()) {
    Integer count = map.get(character);
    count = (count!=null) ? count + 1 : 1;
    map.put(character, count);
}

for (Map.Entry<Character, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}

根据您的确切要求调整正则表达式(跳过标点符号等)。


0

这是作业吗?如果不知道,我会假设最好的答案。

你问题背后的逻辑是

  • 逐个字符遍历列表
  • 计算该字符的数量:由于可能的字符(不包括Unicode)仅有256个,因此您可以拥有一个256个 int 的数组并在其中计数:以这种方式,您将不需要搜索正确的计数器,只需增加正确的索引即可。

0
        String input = "AAZERTTYAATY";
        char[] chars = input.toCharArray();
        Map<Character, Integer> map = new HashMap<>();
        for (char aChar : chars) {
            Integer charCount = map.putIfAbsent(aChar, 1);
            if (charCount != null) {
                charCount++;
                map.put(aChar, charCount);
            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接