面试题:输入一行字符,分别统计出其中英文字母、中文字符、空格、数字和其它字符的个数

可以根据各种字符在Unicode字符编码表中的区间来进行判断,如数字为'0'~'9'之间,英文字母为'a'~'z'或'A'~'Z'等,Java判断一个字符串是否有中文是利用Unicode编码来判断,因为中文的编码区间为:0x4e00--0x9fbb, 但通用区间来判断中文也不非常精确,因为有些中文的标点符号利用区间判断会得到错误的结果。所以通过Character.UnicodeBlock来进行判断。代码如下:

package com.example.test;

public class CountCharacter {

    /**中文字符 */
private int chCharacter = 0; /**英文字符 */
private int enCharacter = 0; /**空格 */
private int spaceCharacter = 0; /**数字 */
private int numberCharacter = 0; /**其他字符 */
private int otherCharacter = 0; /***
* 统计字符串中中文,英文,数字,空格等字符个数
* @param str 需要统计的字符串
*/
public void count(String str) {
if (null == str || str.equals("")) {
System.out.println("字符串为空");
return;
} for (int i = 0; i < str.length(); i++) {
char tmp = str.charAt(i);
if ((tmp >= 'A' && tmp <= 'Z') || (tmp >= 'a' && tmp <= 'z')) {
enCharacter ++;
} else if ((tmp >= '0') && (tmp <= '9')) {
numberCharacter ++;
} else if (tmp ==' ') {
spaceCharacter ++;
} else if (isChinese(tmp)) {
chCharacter ++;
} else {
otherCharacter ++;
}
}
System.out.println("字符串:" + str + "");
System.out.println("中文字符有:" + chCharacter);
System.out.println("英文字符有:" + enCharacter);
System.out.println("数字有:" + numberCharacter);
System.out.println("空格有:" + spaceCharacter);
System.out.println("其他字符有:" + otherCharacter);
} /***
* 判断字符是否为中文
* @param ch 需要判断的字符
* @return 中文返回true,非中文返回false
*/
private boolean isChinese(char ch) {
//获取此字符的UniCodeBlock
Character.UnicodeBlock ub = Character.UnicodeBlock.of(ch);
// GENERAL_PUNCTUATION 判断中文的“号
// CJK_SYMBOLS_AND_PUNCTUATION 判断中文的。号
// HALFWIDTH_AND_FULLWIDTH_FORMS 判断中文的,号
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
System.out.println(ch + " 是中文");
return true;
}
return false;
} public static void main(String[] args) {
String str = "adbs13姿z势12年概~3!a @x # $率 论zs12 szsgss 1234@#¥說說愛き ,。?!%……&*()——{}【】";
CountCharacter countCharacter = new CountCharacter();
countCharacter.count(str); } }

执行结果为:

姿 是中文
势 是中文
年 是中文
概 是中文
率 是中文
论 是中文
¥ 是中文
說 是中文
說 是中文
愛 是中文
, 是中文
。 是中文
? 是中文
! 是中文
… 是中文
… 是中文
( 是中文
) 是中文
— 是中文
— 是中文
【 是中文
】 是中文
字符串:adbs13姿z势12年概~3!a @x # $率 论zs12 szsgss  1234@#¥說說愛き ,。?!%……&*()——{}【】
中文字符有:22
英文字符有:15
数字有:11
空格有:8
其他字符有:13

参考:http://blog.163.com/dengjingniurou@126/blog/static/539891962012312114710444/

JAVA 统计字符串中中文,英文,数字,空格的个数的更多相关文章

  1. JAVA 统计字符串中中文,英文,数字,空格,特殊字符的个数

    引言 可以根据各种字符在Unicode字符编码表中的区间来进行判断,如数字为'0'~'9'之间,英文字母为'a'~'z'或'A'~'Z'等,Java判断一个字符串是否有中文是利用Unicode编码来判 ...

  2. JAVA从字符串中提取纯数字

    /** * 从字符串中提取纯数字 * @param str * @return */ public static String getNumeric(String str) { String regE ...

  3. Java:求字符串中邻接的数字为一个整体

    public static void main(String[] args) { String strNumbers = "0123456789";//用来进行判断数字的 Syst ...

  4. java判定字符串中仅有数字和- 正则表达式匹配 *** 最爱那水货

    1.当有其他字符出现时,返回的数组长度>1 String s = "3---6\\5656";        Pattern pattern = Pattern.compil ...

  5. java统计字符串中每个字符出现的次数

    package MapTest; import java.util.HashMap; public class MapTest { public static void Count(String st ...

  6. java 统计字符串中连续重复的字符,并得出新字符串

    题目: 比如输入为aaabbc,输出a3b2c1 完整解答: public class Other { static String func(String str) { StringBuffer re ...

  7. Python统计字符串中的中英文字符、数字空格,特殊字符

    # -*- coding:utf8 -*- import string from collections import namedtuple def str_count(s): '''找出字符串中的中 ...

  8. Oracle中中文、数字,英文混杂形式的字段进行排序的方法

    http://blog.csdn.net/p451933505/article/details/9272257 对Oracle中中文.数字.英文混杂形式的字段进行排序的方法: 例如: order by ...

  9. java截取字符串中的数字

    java从字符串中提取数字 随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取 ...

随机推荐

  1. 静默安装MSSQL

    原文地址:http://www.cnblogs.com/lyhabc/p/3511788.html 介绍 假如你有50台服务器需要安装SQLSERVER,如果你用下一步下一步的方式,用远程桌面不停切换 ...

  2. GIT分支管理是一门艺术(转)

    英文原文:http://www.nvie.com/posts/a-successful-git-branching-model/ 原文作者:Vincent Driessen 本文经Linux大棚博主总 ...

  3. java读写文件

    对于任何文件,不管有没有扩展名,都可以读写.切记,最后要.close();,否则效果出不来. 读操作: package com.wjy.read; import java.io.BufferedRea ...

  4. 分布式消息系统Jafka入门指南之二

    分布式消息系统Jafka入门指南之二 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 三.Jafka的文件夹结构 1.安装tree命令 $ sudo yu ...

  5. mysql sqlserver Oracle字符串连接

    mysql 例mysql> select CONCAT('My', 'S', 'QL'); sqlserver select name+'aa' from student; oracle sel ...

  6. hihoCoder #1174:拓扑排序&#183;一

    [题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 因为今天上课的老师讲的特别无聊.小Hi和小Ho偷偷地聊了起来. 小Ho:小Hi ...

  7. 参数化测试--sheet表的应用

    自动化测试对录制和编辑好的测试步骤进行回放,这种是线性的自动化测试方式,其缺点是明显的,就是其测试覆盖面比较低.测试回放的只是录制时做出的界面操作,以及输入的测试数据,或者是脚本编辑时指定的界面操作和 ...

  8. hdu1430魔板

    Problem Description 在魔方风靡全球之后不久,Rubik先生发明了它的简化版——魔板.魔板由8个同样大小的方块组成,每个方块颜色均不相同,可用数字1-8分别表示.任一时刻魔板的状态可 ...

  9. 将ACCESS数据库迁移到SQLSERVER数据库

    原文:将ACCESS数据库迁移到SQLSERVER数据库 将ACCESS数据库迁移到SQLSERVER数据库 ACCESS2000文件 用ACCESS2007打开,并迁移到SQLSERVER2005里 ...

  10. 使用GDAL图书馆RPC校正问题

    很快就会GDAL库更新1.11版本号之后,在发现之前写RPC像方误差修正模型校准结果特别大(在更新结果之前的版本号和PCI结果一致).所以初步推断是GDAL库的bug,经过各个參数改动发现原来是指定的 ...