请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。
代码
class Solution {public boolean isNumber(String s) {int l=0,r=s.length()-1;while (l<s.length()&&s.charAt(l)==' ') l++;while (r>0&&s.charAt(r)==' ') r--;s=s.substring(l,r+1);int p=0,n=0,e=0;for (int i=0;i<s.length();i++){switch (s.charAt(i)){case '.': if(i>0&&!Character.isDigit(s.charAt(i-1))&&s.charAt(i-1)!='+'&&s.charAt(i-1)!='-'||i<s.length()-1&&!Character.isDigit(s.charAt(i+1))&&s.charAt(i+1)!='+'&&s.charAt(i+1)!='-'&&s.charAt(i+1)!='e'&&s.charAt(i+1)!='E'||p==1||s.length()==1||e==1)return false; p++;break;case '+':case '-':if(i!=0&&(s.charAt(i-1)!='e'&&s.charAt(i-1)!='E')||i==s.length()-1)return false;break;case 'e':case 'E':if(i==0||i==s.length()-1||n==0||e>0) return false; p=0; e++;break;case ' ': return false;default:if(!Character.isDigit(s.charAt(i))) return false;n++;}}return n>0;}
}