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     }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值