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://www.jiuzhang.com/solutions/valid-number/ 和http://www.cnblogs.com/yuzhangcmu/p/4060348.html的答案妙极啊。
我抄在这里~背诵一遍。他们的思路是:
首先我们看,能够出现的符号有:'e', 'E', '.' , '+', '-', '0 ~ 9'。 所以如果出现了别的东西,直接return false
再者,这些符号出现的顺序是有讲究的。
对于‘e’ 和 ‘E’:e的前后都要有数字,不会一e为开头或结尾;不可能出现两个e。
对于‘.' :不可能在e后面出现,不会有两个‘.’。
对于‘+/-’:只能出现在最开头或者紧跟‘e’。
所以我们从头到尾读取,用三个flag表示这些符号的出现状态,思路就很清楚了!看代码吧
1 public boolean isNumber(String s) { 2 // Write your code here 3 if (s == null) { 4 return false; 5 } 6 String newS = s.trim(); 7 boolean num = false; 8 boolean exp = false; 9 boolean dot = false; 10 for (int i = 0; i < newS.length(); i++) { 11 if (newS.charAt(i) == 'e' || newS.charAt(i) == 'E') { 12 if (!num || exp) { 13 return false; 14 }else{ 15 exp = true; 16 num = false; 17 } 18 }else if(newS.charAt(i) == '.') { 19 if (exp || dot) { 20 return false; 21 }else{ 22 dot = true; 23 } 24 }else if(newS.charAt(i) == '+' || newS.charAt(i) == '-') { 25 if (i != 0 && newS.charAt(i - 1) != 'e' && newS.charAt(i - 1) != 'E') { 26 return false; 27 } 28 }else if(newS.charAt(i) >= '0' && newS.charAt(i) <= '9') { 29 num = true; 30 }else{ 31 return false; 32 } 33 } 34 return num; 35 }