Valid Number leetcode java


题目

Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

 

题解

正则表达式。

 本文代码引用自:http://blog.csdn.net/fightforyourdream/article/details/12900751

代码:

 1      public  boolean isNumber(String s) {
 2          if(s.trim().isEmpty()){  
 3              return  false;  
 4         }  
 5         String regex = "[-+]?(\\d+\\.?|\\.\\d+)\\d*(e[-+]?\\d+)?";  
 6          if(s.trim().matches(regex)){  
 7              return  true;  
 8         } else{  
 9              return  false;  
10         }  
11     }

 

如果按照判断的方法可以如下:

 1  public  static  boolean isNumber(String s) {
 2          int i = 0;
 3          while(s.charAt(i) == ' '){     //  移除前导whitespace
 4              i++;
 5              if(i >= s.length()){
 6                  return  false;
 7             }
 8         }
 9          if(s.charAt(i)=='+' || s.charAt(i)=='-'){     //  忽略符号位
10              i++;
11         }
12          int j = s.length()-1;
13          while(s.charAt(j) == ' '){     //  移除后缀whitespace
14              j--;
15         }
16          if(i <= j){
17             s = s.substring(i, j+1);
18         } else{
19              return  false;
20         }
21         
22          int dot = -1;     //  记录点的位置
23           int ee = -1;     //  记录e的位置
24           for(i=0; i<s.length(); i++){
25              if(dot==-1 && s.charAt(i)=='.'){
26                 dot = i;
27             } else  if(ee==-1 && s.charAt(i)=='e'){
28                 ee = i;
29                  if(i+1<s.length() && (s.charAt(i+1)=='-' || s.charAt(i+1)=='+')){
30                     i++;
31                 }
32             } else{
33                  if(Character.isDigit(s.charAt(i))){
34                      continue;
35                 } else{
36                      return  false;
37                 }
38             }
39         }
40         
41          // xxx.xxexx
42          String startStr, midStr, lastStr;
43          if(dot==-1 && ee==-1){     // xxx  
44              startStr = s;     //  xxx
45               if(startStr.length()<1){
46                  return  false;
47             }
48         } else  if(dot!=-1 && ee==-1){     // xxx.yyy  
49              startStr = s.substring(0, dot);     //  xxx
50              midStr = s.substring(dot+1);         //  yyy
51               if(startStr.length()<1 && midStr.length()<1){
52                  return  false;
53             }
54         } else  if(dot==-1 && ee!=-1){     //  xxxeyyy
55              startStr = s.substring(0, ee);     //  xxx
56               if(startStr.length()<1){
57                  return  false;
58             }
59              if(ee+1<s.length() && (s.charAt(ee+1)=='-' || s.charAt(ee+1)=='+')){     //  xxxe-zz
60                  lastStr = s.substring(ee+2);     //  zz
61              } else{
62                 lastStr = s.substring(ee+1);
63             }
64              if(lastStr.length() < 1){
65                  return  false;
66             }
67         } else{         // xxx.yyezz
68               if(dot>ee){         //  位置不对
69                   return  false;
70             }
71             startStr = s.substring(0, dot);     //  xxx
72              midStr = s.substring(dot+1, ee);     //  yy
73               if(startStr.length()<1 && midStr.length()<1){
74                  return  false;
75             }
76              if(ee+1<s.length() && (s.charAt(ee+1)=='-' || s.charAt(ee+1)=='+')){
77                 lastStr = s.substring(ee+2);     //  zz
78              } else{
79                 lastStr = s.substring(ee+1);
80             }
81              if(lastStr.length() < 1){
82                  return  false;
83             }
84         }
85          return  true;
86     }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM