黑马程序员技术交流社区

标题: 如何输入一行字符,判断后,将各个字符归类,统计、并... [打印本页]

作者: 朝花夕拾    时间: 2012-11-3 20:08
标题: 如何输入一行字符,判断后,将各个字符归类,统计、并...
本帖最后由 张雄 于 2012-11-5 23:08 编辑

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
本人写的代码如下:
import java.util.Scanner;//导入Scanner类
public class ZiFu {
public static void main(String[] args) {
     char[] arr = null;
  int a=0,b=0,c=0,d=0;
     Scanner sc = new Scanner(System.in);//把Scanner跟标准的输入流绑在一起
  System.out.println("美女请输入字符:");
   String s = sc.nextLine();//获取一行字符
   arr = s.toCharArray();//将获取的字符存入数组
    for(int i=0;i<arr.length;i++){//对输入的数组进行遍历
     if(arr>='0' && arr <= '9') {
      a++;
      System.out.print(arr);
     } else if((arr>='a' && arr <= 'z') ||arr > 'A' &&arr <= 'Z') {
      System.out.print(arr);
      b++;
     } else if(arr==' ') {
      System.out.print(arr);
      c++;
      } else {
       System.out.print(arr);
      d++;
      }
  }
  System.out.println("数字的个数:\t"+a);
  System.out.println("字母的个数:\t"+b);
  System.out.println("空格的个数:\t"+c);
  System.out.println("其他字符的个数:"+d);
}
}
现在需要用简便的方法,输入一个字符后进行判断后存储,需要输出的结果为 字符个数 什么字符,例如:您输入的数字为:*个,您输入的数字是:******
考虑到如果数组存储需要定义四个数组,且每存储一次需要记录其位置,比较繁琐,求解答!

作者: 朱宏青    时间: 2012-11-3 20:48
?直接往string里面放不就好了,说实在的,单论储存的话 string绝对够了,并且能力比其他的高太多太多,不行还有bufferstring,绝对够用.
作者: 朝花夕拾    时间: 2012-11-3 21:28
qwepoidjdj 发表于 2012-11-3 20:48
?直接往string里面放不就好了,说实在的,单论储存的话 string绝对够了,并且能力比其他的高太多太多,不行还有 ...

String的话 内存开销会不会太大?每次都会生成一个String对象,bufferstring没有用过不是很清楚,
作者: 朱宏青    时间: 2012-11-3 21:33
张雄 发表于 2012-11-3 21:28
String的话 内存开销会不会太大?每次都会生成一个String对象,bufferstring没有用过不是很清楚, ...

放心 这才几个,你想想游戏要占多少个内存,这有没有10万分之一都说不准,况且java不比c 考虑运行效率,人家c是有直接关联的类,java都是在基础上二次封装的,说难听点,就是不要浪费内存,但是要用的还是得用.

嘛 你就说要实现什么样的,我大概给你想个法子 提供思路跟方法 你可以去测试一下

上面说的不是很清楚 我有点看不懂
作者: 朝花夕拾    时间: 2012-11-3 22:03
qwepoidjdj 发表于 2012-11-3 21:33
放心 这才几个,你想想游戏要占多少个内存,这有没有10万分之一都说不准,况且java不比c 考虑运行效率,人家c ...

我的意思 我输入一串字符 然后进行判断,分类,比如数字,我存一个容器里,字符存一个容器,这样打印的时候我就即可以输出分类后 字符串的个数,还有对应的字符,
作者: 朱宏青    时间: 2012-11-3 22:18
首先用input.nextLine();将录入的数据储存到一个String temp里,然后用substring()遍历这个string把里面的数据按照a-z,0-9进行分类(相当于正则),并分别赋给temp2,temp3。并且可以再次利用正则将数据单独提出来按照编号再放入数组中。

听起来麻烦 其实做起来还是相当简单的,就看你需要进行怎么样的分类了。
作者: 杨志男    时间: 2012-11-4 11:26
  1. <p>public class AAAA {
  2. public static void main(String[] args) throws IOException {
  3.   // 根据字符的ASCII查找
  4.   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  5.   String str = br.readLine();
  6.   StringBuffer sb = new StringBuffer();
  7.   sb.append(str);
  8.   int a = 0, b = 0, c = 0;
  9.   for (int j = 0; j < sb.length(); j++) {
  10.    //48——57代表0——9,ASCII码表
  11.    if (sb.charAt(j) <= 57 & sb.charAt(j) >= 48) {  
  12.     a++;
  13.    }
  14.    //65——90代表A-Z,97-122代表a——z
  15.    if (sb.charAt(j) <= 90 & sb.charAt(j) >= 65 | sb.charAt(j) <= 122
  16.      & sb.charAt(j) >= 97) {
  17.     b++;
  18.    }
  19.    if (sb.charAt(j) == ' ') {
  20.     c++;
  21.    }
  22.   }
  23.   System.out.println("数字个数:" + a);
  24.   System.out.println("字母数:" + b);
  25.   System.out.println("空格数:" + c);
  26.   System.out.println("其他字符数:" + (sb.length() - a - b - c));
  27. }
  28. }</p><p>//够清晰不? </p>
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2