請實作一個函式用來判斷字串是否表示數值(包括整數和小數),例如,字串 "+100","5e2","-123","3.1416" 和 "-1E-16" 都表示數值,但是 "12e","1a3.14","1.2.3","+-5" 和 "12e+4.3" 都不是
解題思路
沒啥可投機取巧的,只能一個一個條件判斷
public class Solution {
public boolean isNumeric(char[] str) {
if(str.length == 0) {
return false;
}
if(str.length == 1) {
if(str[0] < '0' || str[0] > '9') {
return false;
}
}
// 標記符號、小數點、e/E 是否出現過
boolean sign = false, decimal = false, hasE = false;
for(int i = 0; i < str.length; i++) {
if(str[i] == 'e' || str[i] == 'E') {
// e 后面一定要接數字
if(i == str.length - 1) {
return false;
}
// 不能同時存在兩個 e
if(hasE) {
return false;
}
hasE = true;
} else if(str[i] == '+' || str[i] == '-') {
// 第二次出現 +/- 符號,則必須緊接在 e 之后
if(sign && str[i - 1] != 'e' && str[i - 1] != 'E') {
return false;
}
// 第一次出現 +/- 符號,且不在字串開頭,也必須緊接在 e 之后
if(!sign && i > 0 && str[i - 1] != 'e' && str[i - 1] != 'E') {
return false;
}
sign = true;
} else if(str[i] == '.') {
// e 后面不能接小數點,小數點不能出現兩次
if(hasE || decimal) {
return false;
}
decimal = true;
} else if(str[i] < '0' || str[i] > '9') {
// 不合法字符
return false;
}
}
return true;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/235330.html
標籤:其他
上一篇:正則運算式匹配
