新名词
编译原理–词法分析
有限自动机
这个有限自动机我有印象,在软考里面见过。
题目描述:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。
崩溃。。。
其实题不难
但是还是写了这么久写了一堆if else
代码
class Solution {
public boolean isNumber(String s) {
char[] arr = s.toCharArray();
int start = 0;
while (start<arr.length && arr[start]==' ')start++;
int end = arr.length-1;
while (end>=0 && arr[end]==' ') end--;
if(end < start) return false;
int dot = -1;
int e = -1;
int i = start;
if((arr[start] == '-'|| arr[start]== '+')&& start+1<=end ){
i++;
start++;
}
for(;i<=end;i++){
if(arr[i]<='9'&&arr[i]>='0'){
continue;
}else if(arr[i]=='.'){
if(dot == -1)dot = i;
else return false;
} else if(arr[i]=='e'||arr[i]=='E'){
if(e==-1) e = i;
else return false;
} else if(arr[i] == '+' ||arr[i]=='-'){
if(e!=i-1) return false;
if(i==end)return false;
}else {
return false;
}
}
if(e==end||e==start)return false;
if(dot!=-1&&e!=-1){
if(dot>e) return false;
if(dot==start&&dot+1==e)return false;
}
if(dot==start&&dot==end)return false;
return true;
}
}