//日期:19.4.10
//作者:***
//功能:我的面试题目练习一
//问题描述:
//题目:输入一行字符,分别统计出其中汉字、英文字母、空格、数字和其它字符的个数。
//思路方法:得到输入的字符串,进行字符转化,然后处理,处理过程利用正则表达式进行匹配!
//参考博客简单学习一下java中正则表达式的方法
package com.*************;
import java.util.*;
public class Practice {
public static void main(String a[])
{
//主函数,程序入口,进行代码测试
Practice p=new Practice();
p.run();
}
//封装执行的函数
public void run()
{
//思路分析,可以根据 正则表达式进行匹配
//加载提示信息,利用Scanner获取控制台输入信息
System.out.println("请输入一行字符串(除换行外,任何字符不限)");
//利用Scanner和String获取
Scanner scanner=new Scanner(System.in);
//这里记录一个细节
//就是scanner中的next和nextLine的不同点
//next是遇到空格即会停止,即使后面仍有信息,但会被忽略
//而nextLine返回的就是获取的正好了
String str=scanner.nextLine();
//注意io流的使用,一定要记得关闭,养成一个好习惯
scanner.close();
//使用封装的具体函数,解决题目问题
this.getCount(str);
}
//封装解决题目问题的方法,得到各个种类字符的数量,传入屏幕获取的字符串String str
public void getCount(String str)
{
//使用整形变量保存获取的数量
int countChinese=0; //记录获取汉字字符的数量
int countLetter=0; //记录获取英文字母的数量
int countNumber=0; //记录获取数字字符的数量
int countSpace=0; //记录获取键盘空格的数量
int countOther=0; //记录获取其他字符的数量
//构造匹配的正则表达式(此处的正则表达式比较简单)
//[a-b],就是匹配范围a-b中的任意满足的字符
//注:“\u4e00”和“\u9fa5”是unicode编码,并且正好是中文编码的开始和结束的两个值
String pattern1="[\u4e00-\u9fa5]"; //汉字unicode编码范围\u4e00-\u9fa5
String pattern2="[a-zA-Z]"; //正则表达式,匹配英文字母
String pattern3="[0-9]"; //正则表达式,匹配所有数字
String pattern4="[\\s]"; //空格本身即为\s,所以这里使用了转义字符
//把传入的String转化成字符char类型的数组进行单个字节的处理
//这一步还有个细节需要处理,就是在此汉字不能使用char类型去处理(使用的是正则表达式String),所以在转换成字符串数组
char [] char_array=str.toCharArray(); //把字符串分解成字符数组
String [] str_array=new String[char_array.length]; //创建字符串数组,注意本次new只是声明实例化了一个数组的引用
//实例化数组中每个引用,利用char_array进行转换
for(int i=0;i<char_array.length;i++)
{
str_array[i]=String.valueOf(char_array[i]);
}
//遍历数组,进行模式匹配即可--注意对象数组的一种简单遍历方式
for(String s:str_array)
{
//匹配到相应的正则表达式,对应的count++即可
if(s.matches(pattern1)) //String中的match即为匹配相应的正则表达式,返回结果为boolean
{
countChinese++;
}else if(s.matches(pattern2))
{
countLetter++;
}else if(s.matches(pattern3))
{
countNumber++;
}else if(s.matches(pattern4))
{
countSpace++;
}else
{
countOther++;
}
}
//输出查询结果
System.out.println("查询结果如下:");
System.out.println("汉字个数为: "+countChinese);
System.out.println("英文字母个数为: "+countLetter);
System.out.println("数字个数为: "+countNumber);
System.out.println("空格个数为: "+countSpace);
System.out.println("其他字符个数为: "+countOther);
}
}
运行结果如下

本文介绍了一种使用Java正则表达式的方法,来统计输入字符串中汉字、英文字母、数字、空格和其他字符的数量。通过构建特定的正则表达式,如匹配汉字的Unicode范围、英文字母、数字和空格,文章详细展示了如何逐个字符地检查并分类计数。
2143

被折叠的 条评论
为什么被折叠?



