zoukankan      html  css  js  c++  java
  • JAVA 统计字符串中中文,英文,数字,空格的个数

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

    可以根据各种字符在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 测试 (junit+ junit 断言 + postman)
    junit 运行(eclipse + IDEA)
    junit 常用注解 + junit 断言详解
    工作周报模板
    spring boot tomcat 部署
    spring boot 集成JSP
    spring boot 集成 Mybatis,JPA
    JPA 常用注解
    员工年终绩效考核表模板
    2013 Noip提高组 Day1
  • 原文地址:https://www.cnblogs.com/tianyaxue/p/3147471.html
Copyright © 2011-2022 走看看