输入一个字符串,判断能否转化为数字,如果能输出,不能则统计其中数字,英文字母,空格还有其他的个数并输出,帮忙看一上小弟我的这个程序错在哪

输入一个字符串,判断能否转化为数字,如果能输出,不能则统计其中数字,英文字母,空格还有其他的个数并输出,帮忙看一下我的这个程序错在哪?
import java.io.* ;
import java.util.* ;
public class Test{
public static void main(String [] args) throws Exception{
System.out.println("请输入字符串:");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
String line=br.readLine();

/*System.in 接受从控制台输入的字节
new InputStreamReader(System.in);构造一个InputStreamReader对象
这个对象是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。
new BufferedReader(new InputStreamReader(System.in));
构造一个字符流的缓存,里面存放在控制台输入的字节转换后成的字符。
line=br.readLine();从这个缓存中读取一行的内容
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));整个这句话拆开

来写为:
、************************************
InputStream in = System.in ;
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);*/

  if(line.matches("\\d+")) //正则表达式 详细见java.util.regex 类 Pattern
  System.out.println("数字"+line);
  else{
  System.out.println("非数字");
  int digital = 0;
  int character = 0;
  int other = 0;
  int blank = 0;
  char[] ch = null;
  ch = line.toCharArray();
  for(int i=0; i<ch.length; i++) {
  if(i >= '0' && i <= '9') {
  digital ++;
  } else if((i >= 'a' && i <= 'z') || (i > 'A' && i <= 'Z')) {
  character ++;
  } else if(i== ' ') {
  blank ++;
  } else {
  other ++;
  }
  }
  System.out.println("数字个数: " + digital);
  System.out.println("英文字母个数: " + character);
  System.out.println("空格个数: " + blank);
  System.out.println("其他字符个数:" + other );}
}
}

------解决方案--------------------
Java code

String s = "324[a-z]+[a][b] [c][a-z]+ADDD" ;
int digital = 0;
int character = 0;
int other = 0;
int blank = 0;

for (int i = 0; i < s.length(); i++) {
    String s2 = s.substring(i, i+1) ;
    System.out.println(s2);
    if(s2.matches("\\d")){
        digital ++;

    }else if(s2.matches("[a-zA-Z]")){
        character ++;

    }else if(s2.matches(" ")){
         blank ++;

    }else{
        other ++;

    }
}
System.out.println(digital +" "+character +" "+ other +" "+blank);

------解决方案--------------------
你仔细看一下你是在用那个值判断类型
你判断的是i
你应该这样写:
for(int i=0; i<ch.length; i++) {
if(ch[i] >= '0' && ch[i] <= '9') {
digital ++;
} else if((ch[i] >= 'a' && ch[i] <= 'z') || (ch[i] > 'A' && ch[i] <= 'Z')) {
character ++;
} else if(ch[i]== ' ') {
blank ++;
} else {
other ++;
}
}