/**
* 表示數值的字符串
* <p>
* 表示數值的字符串遵循A[.[B]][e|EC]或者.B[e|EC]
* A爲數值的整數部分
* B爲數值的小數部分
* C爲數值的指數部分
* <p>
* 在小數裏面可能沒有整數部分 如.123
*
* @param s
* @return
*/
public boolean isNumeric(String s) {
if (null == s || 0 == s.length()) {
return false;
}
int len = s.length();
int index = 0;
//這個是判斷e或者E前面是否有數值
boolean flag = false;
//判斷開始的符號
if (s.charAt(index) == '+' || s.charAt(index) == '-') {
index++;
}
//判斷整數部分
while (index < len && s.charAt(index) >= '0' && s.charAt(index) <= '9') {
index++;
flag = true;
}
//判斷小數部分
if (index < len && s.charAt(index) == '.') {
boolean f = false;
index++;
while (index < len && s.charAt(index) >= '0' && s.charAt(index) <= '9') {
index++;
flag = true;
f = true;
}
//如果.的前面沒有數字,則後面必須要數字
if (!flag && !f) {
return false;
}
}
//判斷指數部分
//當E或者e的前面沒有整數時,不能表示數值
//當E或者e的後面沒有整數時,不能表示數值
if (index < len && (s.charAt(index) == 'e' || s.charAt(index) == 'E') && flag) {
index++;
//判斷指數部分的正負號 比如123.45e+6
if (index < len && (s.charAt(index) == '+' || s.charAt(index) == '-')) {
index++;
}
while (index < len && s.charAt(index) >= '0' && s.charAt(index) <= '9') {
index++;
}
}
return index == s.length();
}
劍指Offer學習-面試題20:表示數值的字符串
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.