关于坐标输入的基本格式校验
最近写代码的时候遇到了对输入坐标的基本检验,特此来和大家分享一下~
输入格式:
- “正负号+数字+逗号+正负号+数字”,坐标之间以空格分开。 例如:"33.9,2 -3,9 +6,0 9.0,-3"
对应的正则表达式:
"[+-]?([0-9])[.]?[0-9],[+-]?([0-9])[.]?[0-9]( [+-]?([0-9])[.]?[0-9],[+-]?([0-9])[.]?[0-9]){0,2}"
单个解释:
"[+-]?" -----> 判断数字前是否有正负号,如果有,只能是“+”和“-”其一;
"([0-9])*" -------> 指任意0-9的数字,可以是一个,也可以是多个;
"[.]?" ----------->指数字之间有无小数点,如果有,只能出现一次;
"," ---------> 指横纵坐标之间的逗号;
" " ----------> 指前一个坐标与后一个坐标之间的空格;
"{0,2}" --------> 指至少重复0次,至多重复2次;
所以,“([+-]?([0-9])[.]?[0-9],[+-]?([0-9])[.]?[0-9]” 就是验证一次“正负号+数字+逗号+正负号+数字”
而“( [+-]?([0-9])[.]?[0-9],[+-]?([0-9])[.]?[0-9]” 验证之后输入的坐标,输入的坐标至多是2个
注意,“( [+-]?([0-9])[.]?[0-9],[+-]?([0-9])[.]?[0-9]”中的空格不要漏掉,因为从输入的第二个坐标开始,每多一个坐标就会多一个空格
综上,我们输入的坐标至少是一个,至多是3个,当然了,需求不同的小伙伴也可以指定其他的校验次数(这里的校验此时相当于出现次数)
3.在1的基础上以"(x,y)"的格式输入,即加上一对括号
举一反三,只需在坐标开头加上"[(]"以及坐标结尾加上"[)]" 例如: "[(][+-]?([0-9])[.]?[0-9],[+-]?([0-9])[.]?[0-9][)]"
很简单有木有!!!
下面是一些代码举例:
1.输出正确
String s = "+888902,-3 -8989.9,0 34.5,6";
System.out.println(s.matches("[+-]?([0-9])*[.]?([0-9])*,[+-]?([0-9])*[.]?([0-9])*( [+-]?([0-9])*[.]?([0-9])*,[+-]?([0-9])*[.]?[0-9]*){0,2}""));
输出结果:true
有图有真相:

2.输出错误
String s = "++888902,-3 -8989.9,0 34.5,6 //正负号错误
输出结果:false

String +888902,-3 -8989.9,0 34.5,6 9,9//坐标个数超过三个
输出结果:false


浙公网安备 33010602011771号