剑指offer 表示数值的字符串(Java)
Posted *^O^*—*^O^*
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer 表示数值的字符串(Java)相关的知识,希望对你有一定的参考价值。
题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
题目链接
解题思路
由题我们可以看出,这里我们需要的是遍历一个字符串,由于这里的数字加有”E“和“±.”,并且像“E .”这些只能出现出现一次,并且“E”不能出现在最后比如12E,就不符合,并且E的后面是不能有“.”的
代码示例
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return bool布尔型
*/
public boolean isNumeric (String str) {
// write code here
if(str.length() == 1 && (str.charAt(0) > '9' || str.charAt(0) < '0')){
return false;
}
char[] ch=str.toCharArray();
if(ch.length==0 || ch==null){
return false;
}
int dotNum=0;//.的数量
int index=0;//索引位置
int eNum=0;//记录e的数量
int num=0;//记录数字的数量
if(ch[0]=='+' || ch[0]=='-'){
index++;
}
while(index<ch.length){
if(ch[index]>='0' && ch[index]<='9'){
index++;
num=1;
}
else if(ch[index]=='.'){// e后面不能有.,e的个数不能大于1.
if(dotNum>0 || eNum>0){
return false;
}
dotNum++;
index++;
}
else if(ch[index]=='e' || ch[index]=='E'){// 重复e或者e前面没有数字
if(eNum>0 || num==0){
return false;
}
eNum++;
index++;
if(index<ch.length &&(ch[index]=='+'|| ch[index]=='-')){
index++;
}
if(index==ch.length){//若e作为最后一个字符,就不符合,需要返回false
return false;
}
}
else{
return false;
}
}
return true;
}
}
以上是关于剑指offer 表示数值的字符串(Java)的主要内容,如果未能解决你的问题,请参考以下文章