问题:封装一个方法,判断字符串是否是数值型,要求也能判断负数
答案:
测试方法1:使用org.apache.commons.lang3.StringUtils
@Test
void judgeStringType() {
String s0 = "123";
String s1 = "adb123";
String s2 = "-1";
String s3 = "0";
String s4 = "3.1415926";
System.out.println("判断s0是否为数值类型:" + StringUtils.isNumeric(s0));
System.out.println("判断s1是否为数值类型:" + StringUtils.isNumeric(s1));
System.out.println("判断s2是否为数值类型:" + StringUtils.isNumeric(s2));
System.out.println("判断s3是否为数值类型:" + StringUtils.isNumeric(s3));
System.out.println("判断s4是否为数值类型:" + StringUtils.isNumeric(s4));
}
测试结果表明
:使用org.apache.commons.lang3.StringUtils,判断字符串是否是数值类型,数值只能判断0~正整数,有一个缺陷,负数和浮点数未正确判断,比如-1判断为false
测试方法2:采用正则表达式匹配,优点:除字符串外都能匹配
@Test
void judgeStringType2() {
Pattern pattern = Pattern.compile("-?\\d+(\\.\\d+)?");
String s0 = "123";
String s1 = "adb123";
String s2 = "-1";
String s3 = "0";
String s4 = "3.1415926";
System.out.println("判断s0是否为数值类型:" + pattern.matcher(s0).matches());
System.out.println("判断s1是否为数值类型:" + pattern.matcher(s1).matches());
System.out.println("判断s2是否为数值类型:" + pattern.matcher(s2).matches());
System.out.println("判断s3是否为数值类型:" + pattern.matcher(s3).matches());
System.out.println("判断s4是否为数值类型:" + pattern.matcher(s4).matches());
}
测试结果表明
:采用正则表达式匹配,优点:除字符串外都能匹配,推荐使用第二种方法。