leetcode剑指 Offer 20. 表示数值的字符串

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+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;
    }
}

你可能感兴趣的:(leetcode,字符串,java,leetcode)