计算字符串中所有数字的出现次数

时间:2017-03-13 04:41:42

标签: java string

我的任务是编写一个程序,将字符串作为输入(仅限数字),对于从0到9开始的每个数字,在字符串中打印它们出现的计数。 我已经完成了。我已声明10个整数为零。每个整数将计算相应的整数。但是在我打印结果的最后一次,它给我的结果为 48 + count Count表示值出现次数的计数。 为了得到正确的结果,我需要减去48.我无法理解为什么我会获得价值。

class TestClass {
public static void main(String args[] ) throws Exception { 
    Scanner sc = new Scanner(System.in);     
    int a='0',b='0',c='0',d='0',e='0',f='0',g='0',h='0',i='0',j='0';
    String s=sc.next();

    OUTER:
    for (int k = 0; k<s.length(); k++) {
        char ch=s.charAt(k);
        switch (ch) {
            case '0':
                a++;
                break;
            case '1':
                b++;
                break;
            case '2':
                c++;
                break;
            case '3':
                d++;
                break;
            case '4':
                e++;
                break;
            case '5':
                f++;
                break;
            case '6':
                g++;
                break;
            case '7':
                h++;
                break;
            case '8':
                i++;
                break;
            case '9':
                j++;
                break;
            case ' ':
                break OUTER;
            default:
                break;
        }
    }

   System.out.println("0 "+(a-48));
    System.out.println("1 "+(b-48));
     System.out.println("2 "+(c-48));
      System.out.println("3 "+(d-48));
       System.out.println("4 "+(e-48));
        System.out.println("5 "+(f-48));
         System.out.println("6 "+(g-48));
          System.out.println("7 "+(h-48));
           System.out.println("8 "+(i-48));
            System.out.println("9 "+(j-48));


}
}

请任何人解释一下我可以做些什么来消除这个程序中的额外价值。 谢谢

2 个答案:

答案 0 :(得分:4)

而不是

int a = '0' 

使用

int a = 0

'0'在ASCII中等于48,它是一个字符,而不是一个数字。因此,通过int a = '0',您实际上会将a初始化为48

答案 1 :(得分:1)

我建议改用数组。它会更容易处理。

String str = sc.next();
char[] input = str.toCharArray();

int[] count = new int[10]; // stores the count, int array initialized to 0 by default

for(int i = 0 ; i < input.length; i++){
    // get index value by substracting ASCII value
    int c = input[i] - 48; // 48 being ASCII Value of '0'
    count[c]++;
}

// print the count array
System.out.println(Arrays.toString(count));

count [0]没有0&#39; s count [1]没有1个 .....