从字符串中获取所有字符及其编号

时间:2010-05-30 23:51:27

标签: java string text-parsing repeat

如何在Java中获取字符串中出现的所有字符的列表,以及它们的出现次数?假设我们有一个字符串“我现在真的很忙”所以我应该得到:

i-2,a-2,r-2,m-1等。

4 个答案:

答案 0 :(得分:4)

只需绘制每个角色及其数量的映射。您可以使用String#toCharArray()获取String的字符数组,并使用enhanced for loop循环显示它。在每次迭代中,从映射中获取计数,如果不存在则设置它,然后将其递增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 tutorial on the subject


你评论说它是“为了一个项目”,但它却是一个典型的家庭作业问题,因为它非常基础,并且在一本体面的Java书/教程的第一章中有所介绍。如果您是Java新手,我建议您自己完成Sun Trails Covering the Basics

答案 1 :(得分:0)

是作业吗?在不知情的情况下,我会尽力做出最好的答案。

你的问题背后的逻辑是

  • 在时间上列出一个字符
  • 计算那个字符:因为可能的字符(不包括unicode)只有256个,你可以有一个256 int的数组并在那里计算它们:这样你就不需要搜索正确的计数器而只是增加正确的指数。

答案 2 :(得分: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());
}

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

答案 3 :(得分: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);
            }
        }