一、前言
其实,关于键盘输入的获取,我们在综合练习1中已经探讨过了。主要是使用 System.in 这个基础输入流来获取。具体参考《笨方法学 Java -18-综合练习1-实现分析-获取键盘输入》这篇文章。
在本章节,我们讨论一个更加难的问题:关于输入结果的合规性校验。
在日常开发中,我们对于用户输入的信息一般是处理为字符串(String)形式的。这样处理,我们会产生一个问题:如何判断输入结果是否满足程序处理需要?比如:我们的请假单中有一个参数,请假天数。天数是正整数,不能为0,因为请假0天没有意义。
有些读者可能觉得,这个问题只需要自己写一个针对性的 if 判断即可。但是,在日常开发中,这些输入校验的问题是非常多的。如果写针对性的判断代码,程序就不能通用,在维护上很麻烦。
因此,我们这里需要介绍一种简约而有效的技术:正则表达式。
二、正则表达式的定义
正则表达式是关于字符串中数据定义规则的一种描述。比如:我们广东省的车牌号码规则“粤+地市字母代号+5位随机数字或者字母组合”。根据这个车牌号码规则,我们可以看出以下车牌号码,粤A123W8,是合规的;而以下车牌号码,粤A123W811是不合规的。
上面描述的广东的车牌号码规则是一个关于车牌号码的定义规则,如果写成正则表达式,则大概如下:^粤[A-Z][0-9A-Z]{5}$。不知道大家能不能看懂这个正则表达式。
关于正则表达式,每种语言对它的支持度都是不同的。有些符号和写法在一种语言可行,在另外一种语言则无效。所以大家使用正则表达式时,需要看语言环境而定。比如,上面的正则表达式“^粤[A-Z][0-9A-Z]{5}$”是在 Javascript 中的写法,如果是Java中,不需要写“^” 和 “$” 符号。
Java代码测试效果截图如下:

Javascript 代码测试效果如下:

三、正则表达式的语法
正则表达式的语法网上已经有很好的官方文档,大家可以参考这个地址的信息:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
注意:
1、正则表达式除了用于校验外,还可以用于字符串提取,替换等。
2、Java 中使用正则表达式,如果有“\”符号,需要以”\\”代替。
四、关于程序中数据匹配的实现
关于程序中,对于输入参数的校验,我们可以定义一个方法如下:

如此设计一个获取键盘输入的处理,主要有以下几点考虑:
1、由于需要获取的替换内容较多,因此定义一个通用方法处理比较简约。
2、每次调用时,传入关于获取内容的描述信息,增加界面交互的友好性。
3、每次调用时,传入关于获取内容的正则校验字符串,以适应不同内容的需要。
4、每次调用时,可以传入默认字符串。比如,如果内容允许有默认值,则当获取不到内容时,以默认值代替。
5、每次调用时,如果内容有大小写转换,则可以提供一个方法参数来处理。
实现代码如下:

本章完结