Java中的简单数字计数器方法

时间:2012-08-09 02:30:29

标签: java methods counter

我正在尝试创建一个方法,该方法将计算字符串中数字的出现次数并将其记录到数组中。

例如,如果输入方法的字符串是“1223000”,则计数器[1] = 1,计数器[2] = 2,计数器[3] = 1,计数器[0] = 3.

我一直得到一个arrayindexoutofbounds错误,这是我所拥有的代码:

//method: count number of occurences for digits
    public static int[] count(String s){

        int[] counter = new int[10];

        for(int j= 0; j < s.length(); j++){
            if (Character.isDigit(s.charAt(j)))
                counter[s.charAt(j)] += 1;
        }

        return counter;
    }

5 个答案:

答案 0 :(得分:4)

请参阅my comment了解如何解决问题。

您还应该考虑直接循环字符串的字符,而不是跟踪字符串中的位置并使用charAt

例如,

public static int[] countDigits(final String str) {
  final int[] freq = new int[10];
  for (final char c : str.toCharArray()) {
    if (Character.isDigit(c)) {
      ++freq[c - '0'];
    }
  }
  return freq;
}

使用以下代码测试上述内容不会导致错误(java -ea DigitFreqTest)。

final String input = "1223000";
final int[] freq = countDigits(input);
assert freq[0] == 3 && freq[1] == 1 && freq[2] == 2 && freq[3] == 1;

请注意,上述内容不支持Unicode ...在这种情况下,您可能希望使用Character.getNumericValue

public static Map<Integer, Integer> countNumerals(final String str) {
  final Map<Integer, Integer> freq = new HashMap<Integer, Integer>(10);
  for (final char c : str.toCharArray()) {
    if (Character.isDigit(c)) {
      final int num = Character.getNumericValue(c);
      Integer occ = freq.get(num);
      if (occ == null) {
        occ = 0;
      }
      freq.put(num, occ + 1);
    }
  }
  return freq;      
}

注意我必须使用Map<Integer, Integer>进行即兴创作,因为Java本身并不提供多集合集合: - (

答案 1 :(得分:4)

s.charAt(j)将为您提供该数字的字符编号,而不是整数值。

这是非常纠正的代码,但你会得到正确的想法: String s = "1223000"; int[] counter = new int[10];

    for(int j= 0; j < s.length(); j++){

        if (Character.isDigit(s.charAt(j))) {
            int i = Integer.parseInt(s.substring(j, j+1));
            counter[i] += 1;
        }
            //unter[s.charAt(j)] += 1;
    }</code>

答案 2 :(得分:1)

您收到ArrayIndexOutOfBoundsException因为s.charAt(j)中的counter[s.charAt(j)]将返回char的数字,例如'1',然后使用ASCII将char转换为int char '1' 1}}将int 49因此超出数组索引。

答案 3 :(得分:0)

计数器数组(int [] counter)的大小应该是s的长度: int [] counter = new int [s.length()];

答案 4 :(得分:0)

如果你们想要一个计数器,只需将它变成一个字符串,然后使用字符串方法.length()来计算长度,如果这是你正在寻找的东西。如果我没有弄错,length()方法返回一个整数,所以你去。如本页某处所示,数组具有相同的属性,但是有多少空格存储了数据。