题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
- package pratice618;
- public class stringNumValue{
- /**
- * 题目描述:
- * 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
- * 例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。
- * 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
- * 解题思路:
- * 采用正则表达式进行匹配判断
- * [] :字符集合
- * () : 分组
- * ? :重复0-1次
- * * : 重复0-n次
- * + :重复1-n次
- * \\d :数字
- * \\. :转义的.
- * 。 :任意字符
- * 所以表达式为 [+-]?\\d*(\\.\\d+)?([eE][+-]?\\d+)?
- * 或者 [+-]?[0-9]*(\\.[0-9]+)?([eE][+-]?[0-9]+)?
- */
- public static boolean stringNumValue(String str){
- boolean result=false;
- if(str.length()==0) result = false;
- if(str.matches("[+-]?\\d*(\\.\\d+)?([eE][+-]?\\d+)?"))
- result=true;
- return result;
- }
- /*
- * 或者采取判断:
- * 1、e或E出现,后面必须为数字,或者符号+-加数字。并且e和E只能出现一次。
- * 2、+-如果不是第一次出现,且不是在第一位,则必须在e或E的后面。
- * 3、非法字符需要判断即:<='0'或>='9'。
- * 4、。符号只能出现一次,并且。后面应该为数字。
- * 5、'E'和'e'后面可以为数字,或'+-'但是不能再出现。
- */
- public static void main(String[] args) {
- String str = "12e";
- boolean result = stringNumValue(str);
- System.out.println(result+" ");
- }
- }