表示数值的字符串
问题描述:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值,
但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
首先考察逻辑分析能力,具体就是分情况讨论,不存在什么特殊的算法之类的。
本方法思想:合法的数值可以表示为A[.[B]][e|EC]或者.B[e|EC]. 写出了表达式的通式,只需要去判断就行了
持续更新...
代码附下
Java实现:
package 表示数值的字符串;
/**
* 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
* 例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。
* 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
* @author user
* 方法:
*合法的数值可以表示为A[.[B]][e|EC]或者.B[e|EC].
*/
public class Test {
public static void main(String[] args) {
System.out.println(isNum("100") + "[" + true + "]");
System.out.println(isNum("123.45e+6") + "[" + true + "]");
System.out.println(isNum("+500") + "[" + true + "]");
System.out.println(isNum("12e") + "[" + false + "]");
System.out.println(isNum("1a3.14") + "[" + false + "]");
System.out.println(isNum("1+23") + "[" + false + "]");
}
public static boolean isNum(String str) {
if (str == null || str.length() < 1) {
return false;
}
int index = 0;// 当前字符串下标
// 如果第一个数字是+-号 就看下一个数字 index++
if (str.charAt(index) == '+' || str.charAt(index) == '-') {
index++;
}
if (index >= str.length()) {
// 如果只有一个正负号就直接返回false
return false;
}
boolean numberic = true;
// 已经判断了正负号,下面应该找A(A也可能没有)
while (index < str.length() && str.charAt(index) >= '0' && str.charAt(index) <= '9') {
// 找到一个index上的符号不是0-9之间
index++;
}
// 如果没有结束,下一个字符只能是 . e E
if (index < str.length()) {
if (str.charAt(index) == '.') {
// 如果下一个数字为. 则继续扫描B
index++;
while (index < str.length() && str.charAt(index) >= '0' && str.charAt(index) <= '9') {
// 找到一个index上的符号不是0-9之间
index++;
}
if (index >= str.length()) {
// 如果字符串到末尾了返回正确
return true;
} else if (index < str.length() && (str.charAt(index) == 'e' || str.charAt(index) == 'E')) {
// 如果没到末尾 且B后面紧跟着e|E
if (index >= str.length() - 1) {
return false;
}
index++;
if (str.charAt(index) == '+' || str.charAt(index) == '-') {
index++;
}
if (index >= str.length()) {
return false;
}
// 继续扫描数字
while (index < str.length() && str.charAt(index) >= '0' && str.charAt(index) <= '9') {
// 找到一个index上的符号不是0-9之间
index++;
}
return index >= str.length();//index小于length说明e后面还有特殊字符,不符合要求
} else {
numberic = false;
}
return numberic;
}
} else {
return true;
}
return false;
}
}
持续更新...欢迎赞赏!![](https://i-blog.csdnimg.cn/blog_migrate/ca0cc5c488ad24501c0bbddad6302b17.png)
https://blog.csdn.net/ustcer_93lk/article/details/80372959
如果有问题,欢迎大家留言,有更好的方法也期待大家告知。