我的java面试编程题——记录每一天(19.4.10.1)

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

运行结果如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值