通过正则的方法去判断字字符串是否为数(包括整数和小数),本代码没有考虑科学计数法的字符串。
import org.springframework.stereotype.Component;
import java.util.regex.Pattern;
/**
* 判断string是否为数字、整数、小数(这里没有考虑科学计数法的情况,如5e3,-1E-16)
*/
@Component
public final class StrToNum {
//判断数字(int + double + float)
public boolean isNumber(String str) {
if (str == null || "".equals(str)){
return false;
}
Pattern pattern = Pattern.compile("^(-|\\+)?\\d+(\\.\\d+)?$");
return pattern.matcher(str).matches();
}
//判断整数(int)
public boolean isInteger(String str) {
if (null == str || "".equals(str)) {
return false;
}
Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
return pattern.matcher(str).matches();
}
//判断浮点数(double和float)
public boolean isDouble(String str) {
if (null == str || "".equals(str)) {
return false;
}
Pattern pattern = Pattern.compile("[+-]?[0-9]+\\.([0-9]+)"); // 之前这里正则表达式错误,现更正
return pattern.matcher(str).matches();
}
}
已经验证过代码大部分可用性,测试数据如下:
public static void main(String[] args) {
String[] strings = {"11111", "22.222", "22.22.22", ".2222", "-1111", "-222.222", "-.9999", "9999.", "-0.0000", "111s222", "222.a11", "090.0"};
System.out.println("字符串 数字 整数 小数");
for (String str: strings){
System.out.println(str +": "+ strToNum.isNumber(str) + " " + strToNum.isInteger(str) + " " + strToNum.isDouble(str));
}
}