标签:
原题链接在这里:https://leetcode.com/problems/valid-number/
可以按照正则表达式 regex来比照,如Method 1.
Method 2 是分类讨论,原string trim后从e拆开,前面部分可以有dot, 后面部分不可以有dot.
Note: 注意trim后还需要再次检查是否长度为0.
AC Java:
1 public class Solution { 2 public boolean isNumber(String s) { 3 /* 4 //Method 1 5 if(s.trim().isEmpty()){ 6 return false; 7 } 8 String regex = "[-+]?(\\d+\\.?|\\.\\d+)\\d*(e[-+]?\\d+)?"; 9 if(s.trim().matches(regex)){ 10 return true; 11 }else{ 12 return false; 13 } 14 */ 15 16 if(s == null || s.length() == 0){ 17 return false; 18 } 19 s = s.trim(); //去掉前后空格 20 String [] strArr = s.split("e"); 21 if(s.length() == 0 || s.charAt(0) == ‘e‘ || s.charAt(s.length()-1) == ‘e‘ || strArr.length == 0 || strArr.length >2){ 22 return false; 23 } 24 25 for(int i = 0; i<strArr.length; i++){ 26 String str = strArr[i]; 27 boolean hasDot = false; //用来辨别最多可以有一个dot 28 if(str.charAt(0) == ‘+‘ || str.charAt(0) == ‘-‘){ //去掉正负号 29 str = str.substring(1); 30 } 31 if(str.length() == 0){ 32 return false; 33 } 34 for(int j = 0; j<str.length(); j++){ 35 if(Character.isDigit(str.charAt(j))){ //数字跳过 36 continue; 37 }else if(str.charAt(j) == ‘.‘ && !hasDot){ //非数字遇到了dot 38 if(i == 0 && str.length()>1){ //"5e1.7" 39 hasDot = true; 40 }else{ //"." 41 return false; 42 } 43 }else{ //非数字,非dot或者已经有一个dot 44 return false; // ".." 45 } 46 } 47 } 48 return true; 49 } 50 }
参考了这篇帖子:http://www.cnblogs.com/tonyluis/p/4507515.html
标签:
原文地址:http://www.cnblogs.com/Dylan-Java-NYC/p/4951768.html