題目描述
請實現一個函數用來判斷字符串是否表示數值(包括整數和小數)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示數值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
這個題目的思路就是一步一步需要都思維嚴謹的考慮周到:
1.邊界的處理
2.指針遍歷進行判斷分層:遇到+或者-指針向前移動;-->到達了字符串末尾,則肯定不是數值;例如:+
將繼續遍歷接着判斷是否有0-9的數字;-->
【如果未到字符串的末尾】-->
【如果是小數】則移動index。繼續判斷是否後面是0-9的數字;如果已經是字符串末尾則是數值;例如2.3
【如果是指數標識】--> 判斷【是否是科學計數法的結尾部分】,如E5,e5,E+5,e-5,e(E)後面接整數
3// 【已經到了字符串的末尾了,說明其沒有指數部分】<pre name="code" class="java" style="color: rgb(51, 51, 51);"> return true;
在線代碼:
package TestMyselfe;
public class Test54 {
public static boolean isNumeric(char[] str) {
if(str==null){
return false;
}
int index=0;//遍歷str的指針
//如果開始遇到加號和減號則移動index指向的位置
if(str[index]=='+'||str[index]=='-'){
index++;
}
//已經到達字符串的末尾
if(index >= str.length){
return false;
}
boolean numeric=true;//字符串是否可以表示數值
index=IsDigits(String.valueOf(str),index);//判斷字符串剩下的是否是0-9的數字
// 還未到字符串的末尾
if (index < str.length) {
// 【如果是小數點】
if (str[index] == '.') {
// 移動到下一個位置
index++;
index = IsDigits(String.valueOf(str), index);
// (已經到了字符串的末尾了)
if (index >= str.length) {
numeric = true;
}
// (還未到字符串結束位置)
else if (index < str.length && (str[index] == 'e' || str[index] == 'E')) {
numeric = isExponential(String.valueOf(str), index);//如果遇到科學計數法表示
} else {
numeric = false;
}
}
//【 如果是指數標識】
else if (str[index] == 'e' || str[index] == 'E') {
numeric = isExponential(String.valueOf(str), index);
} else {
numeric = false;
}
return numeric;
}
// 【已經到了字符串的末尾了,說明其沒有指數部分】
else {
return true;
}
}
//掃描字符串中的0-9的數位
public static int IsDigits(String str,int index){
while(index < str.length()&&str.charAt(index)>='0'&&str.charAt(index)<='9'){
index++;
}
return index;
}
/**
* 判斷【是否是科學計數法的結尾部分】,如E5,e5,E+5,e-5,e(E)後面接整數
*
* @param string 字符串
* @param index 開始匹配的位置
* @return 匹配的結果
*/
public static boolean isExponential(String str,int index){
//邊界取捨
if(index>=str.length()||(str.charAt(index) != 'e' && str.charAt(index) != 'E')){
return false;
}
//移動到下一個要處理的階段
index++;
//到達字符串末尾就返回false
if(index>=str.length()){
return false;
}
if(str.charAt(index)=='+'||str.charAt(index)=='-'){
index++;
}
// 到達字符串的末尾,就返回false
if (index >= str.length()) {
return false;
}
index = IsDigits(str, index);//繼續判斷是否是0-9
// 如果已經處理到了的數字的末尾就認爲是正確的指數
return index >= str.length();
}
public static void main(String[] args) {
System.out.println(isNumeric("1.2.e1".toCharArray()));
}
}