黑马程序员技术交流社区

标题: 碰到一小难题 [打印本页]

作者: Tesla时光    时间: 2012-9-7 00:46
标题: 碰到一小难题
本帖最后由 翁发达 于 2012-9-7 09:43 编辑

今天碰到一不会的题目:随机输入一行字符,统计出其中英文字母、空格、数字和其它字符各有多少个?   
我的思路是:
因为里面要有中文 英文 空格 之类 所以只能是字符串
于是,通过Scanner对象,定义成能输入字符串型
然定用一个字符数组把这每个位置的字符拆开放入数组中
再用一个for循环去判断每个数组元素属于什么类型
当我写到for循环那问题来了,这里面又是空格,又是字母,又是字符,而且还不确定,这叫我怎么判断啊?
麻烦朋友帮忙解答下.如果我思路有问题,请指正
import java.util.*;
class Test
{
     public static void main(String[] args)
    {
       Scanner sc = new Scanner(System.in);
       String s = sc.nextLine();
     char[] ch =null;
       ch = s.toCharArray();
      for(int i=0; i<ch.length; i++)
    {  
       这里面具体该怎么实现呢?

    }   
 }
}
作者: 孙岳    时间: 2012-9-7 01:12
利用ASCII码判断。
A~Z          65~90
a~z           97~122
空格       32
0~9          48~57
剩下的是其他字符。

   int letter = 0;
     int num = 0;
     int space = 0;
     int other = 0;
      for(int i=0; i<ch.length; i++)
      {
                      if ((ch[i]>=65&&ch[i]<=90)||(ch[i]>=97&&ch[i]<=122))
                          letter ++;
              else if (ch[i] == 32)
                      space ++;
              else if (ch[i]>=48&&ch[i]<=57)
                          num ++;
                  else
                          other ++;
      }   
作者: 杨卓儒    时间: 2012-9-7 01:17
2楼正解
作者: 佟亚鹏    时间: 2012-9-7 09:00
本帖最后由 佟亚鹏 于 2012-9-7 09:01 编辑

这种问题使用二楼的比较assic码方式,效率最好。楼主也可以试试用正则表达式
字母 [a-zA-Z]
数字 [0-9]
其它字符[[^\\w]&&[^\\s]]
空白字符  \s
代码如下:
  1. public static void main(String[] args) {
  2.                 //使用正则表达式
  3.                 String target = "a34cf &*Sf 3dc42cd@.";
  4.                 //记录字母的数量
  5.                 int letterCount = 0;
  6.                 //记录数字的数量
  7.                 int numberCount = 0;
  8.                 //记录空格的数量
  9.                 int spaceCount = 0;
  10.                 //记录其它字符的数量
  11.                 int otherCount = 0;               
  12.                 char[] chars = target.toCharArray();
  13.                 //外联一个String的引用
  14.                 String temp = null;
  15.                 for (int i = 0;i < chars.length;i++) {
  16.                         temp = String.valueOf(chars[i]);        //把第i个位置的字符,转为字符串               
  17.                         if (temp.matches("[a-zA-Z]")) { //匹配字母
  18.                                 letterCount++;
  19.                         } else if (temp.matches("[0-9]")) { //匹配数字
  20.                                 numberCount++;
  21.                         } else if (temp.matches("[[^\\w]&&[^\\s]]")) { //匹配其它字符,出去空白字符
  22.                                 otherCount++;
  23.                         } else if (temp.matches("\\s")){ //匹配空白字符                                 
  24.                                 spaceCount++;                                       
  25.                         }
  26.                 }
  27.                 System.out.println("源字符串: " + target);
  28.                 System.out.println("字母: " + letterCount + ",数字: " + numberCount + ",空格: " + spaceCount + ",其它字符: " + otherCount);
  29.         }
复制代码
//字母: 9,数字: 5,空格: 2,其它字符: 4





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