53、表示数值的字符串
一、题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
二、解题思路
1、自己写的,烂的一批
- 分类讨论
- 首位允许的字符
- +,-,数字
- 中间位允许的字符
- 数字
- e,E
- e后,-,数字
.
- e后,-,数字
- 末尾允许的字符
- 数字
public boolean isNumeric(char[] str) {
/**
* 首位允许的字符
+,-,数字
中间位允许的字符
数字
e,E
e后,-,数字
.
末尾允许的字符
数字
*/
boolean dianFlag=false;
boolean eFlag=false;
if(str.length<1){
return false;
}
if(str[0]!='+'&&str[0]!='-'){
if(!(str[0]>='0'&&str[0]<='9')){
return false;
}
}
for(int i=1;i<str.length-1;i++){
if(str[i]=='e'||str[i]=='E'){
if(eFlag==true){
return false;
}
if((i+1)<str.length){
if(str[i+1]>='0'&&str[i+1]<='9'){
eFlag=true;
i++;
}else{
if(str[i+1]=='-'||str[i+1]=='+'){
if((i+2)<str.length&&str[i+2]>='0'&&str[i+2]<='9'){
eFlag=true;
i++;
}else{
return false;
}
}else{
return false;
}
}
}else{
return false;
}
}else{
if(str[i]=='.'){
if(eFlag){
return false;
}
if(dianFlag==false&&(i+1)<str.length&&str[i+1]>='0'&&str[i+1]<='9'){
dianFlag=true;
i++;
}else{
return false;
}
}else{
if(!(str[i]>='0'&&str[i]<='9')){
return false;
}
}
}
}
if(str[str.length-1]<'0'||str[str.length-1]>'9'){
return false;
}
return true;
}
2、题解
- 正则表达式
- 不会写
- 不学了