题目:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
先分析:
1: + - 0次或1次;--> [+-]?
2: 若干个数字;--> \\d* (之后都是可有可无)
3: (. 有或没有,之后是数字至少有一个),整个有或没有; --> (\\.\d+)?
4: eE-+ 有或没有,之后是至少有一个数字;--> ([eE][-+]\\d+)?
代码实现:
package com.stuk;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = sc.nextLine();
System.out.println(match(str));
}
sc.close();
}
private static boolean match(String str) {
if (str == null || str.length() == 0) {
return false;
}
return str.matches("[+-]?\\d*(\\.\\d+)?([eE][-+]?\\d+)?");
}
}