-2

我有这个字符串string="aaaaaaaaaddsssaaakkaaaaand"我需要知道其中有哪些字符并计算它们的出现次数,我在stackOverFlow中找到了这段代码,但它没有帮助,因为我需要计算字符而不要求用户输入一个。

public static int countOccurrences(String haystack, char needle)
{
    int count = 0;
    for (int i=0; i < haystack.length(); i++)
    {
        if (haystack.charAt(i) == needle)
        {
             count++;
        }
    }
    return count;
}

我需要一种方法来知道有 5 个 a 和 4 个 v 等等。

4

3 回答 3

1

这行得通吗?

public static Map<Character, Integer> countOccurrences(String haystack)
{
    Map<Character, Integer> count = new HashMap<Character, Integer>();
    for (int i=0; i < haystack.length(); i++)
    {
        char c = haystack.charAt(i);
        Integer charCount = count.get(c);
        if(charCount == null) {
            count.put(c, 1);
        } else {
            count.put(c, charCount + 1);
        }
    }
    return count;
}
于 2012-07-07T16:30:49.393 回答
1

您需要获取字符串中所有字符的计数吗?如果是这样,这样的类可能会起作用:

public class CharCounter {

  private final int[] counts = new int[Character.MAX_VALUE];

  public CharCounter(String input) {
    for (int i = 0; i < input.length(); i++) {
      counts[input.charAt(i)] += 1;
    }
  }

  public int getCount(char c) {
    return counts[c];
  }
}

要使用它,您需要执行以下操作:

CharCounter counter = new CharCounter("hello world");
System.count.println("number of 'l' characters: " + counter.getCount('l'));
于 2012-07-07T16:37:02.077 回答
1

我不会给你代码答案,但这个不同的想法应该让你开始:

  1. 您需要有一个空的字符数组(或 arrayList)和一个空的字符串,当然还有您的“待计数”字符串(干草堆)。
  2. 使用排序方法通过大海捞针并按 字母顺序排序(去看看这个,它不是真的太难)。
  3. 一旦您按字母顺序对其进行了排序,请执行另一个 for 循环,该循环遍历新的按字母顺序排序的字符串,如果位置 i+1 处的字符与之前的字符不同,则将一个新字符添加到空字符数组中。现在,在这个循环结束时,该字符数组将在您的原始字符串中包含一个不同字母的小列表!
  4. 还有另一个 for 循环......这是最后一个。这一次,它将是一个 for 循环中的一个 for 循环。外部 for 循环将遍历您的新字符数组,内部循环将遍历原始字符串的字符。现在,您可以计算字符串中字符数组中第一个字符出现的次数,然后是第二个、第三个、第四个......等。每次,您可以打印出“5 a's”“6 b's”等.

这应该有效。让我知道!

于 2012-07-07T16:59:22.137 回答