A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Tesla时光 中级黑马   /  2012-9-7 00:46  /  1300 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 翁发达 于 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++)
    {  
       这里面具体该怎么实现呢?

    }   
 }
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
利用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 ++;
      }   

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
2楼正解
回复 使用道具 举报
本帖最后由 佟亚鹏 于 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

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马