題目描述在數值之前可能有乙個表示正負的『+』或者『-』,接下來是若干個0到9的數字表示數值的整數部分(在某些小數里可能沒有數值的整數部分)。如果數值是乙個小數,那麼在小數點後面可能會有若干個0到9的數字表示數值的小數部分。如果數值用科學技術法表示,接下來是乙個'e'或者『e』,以及緊跟著的乙個整數(可以有正負號)表示指數。請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100","5e2","-123","3.1416"和"-1e-16"都表示數值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
`輸出描述:
true/false
[1-9] :匹配1~9的數字;
\d :匹配數字,包括0~9;
* :緊跟在 \d 之後,表明可以匹配零個及多個數字;
\. :匹配小數點;
? :緊跟在 \. 之後,表明可以匹配零個或乙個小數點;
附:正規表示式常用符號
^開始 $結束
*匹配前乙個表示式0次或多次。等價於 。
+匹配前面乙個表示式1次或者多次。等價於 。
?匹配前面乙個表示式0次或者1次。等價於 。/e?le?/ 匹配 「angel」 中的 『el』,和 「angle」 中的 『le』 以及」oslo』 中的』l』。
[xyz]乙個字元集合。
(x)匹配 『x』 並且記住匹配項
public boolean isnumeric_1(char str)
思路:將char型陣列轉成字串,再用double的parsedouble方法轉成double型數字,如果能轉成功,則返回true。否則會發生numberformatexception異常。返回false。
public boolean isnumeric(char str) catch (numberformatexception e)
return true;
}
首先看第乙個字元是不是正負號。如果是,在字串上移動乙個字元,繼續掃瞄剩餘的字串中0-9的數字。如果是乙個小數,則將遇到小數點。另外,如果是用科學計數法表示的數值,在整數或者小數的後面還可能遇到『e』或者『e』。編寫**時時刻需要判斷陣列是否越界。
public class solution
int index = 0;
if(str[index] == '+' || str[index] == '-')
if(index == str.length)
boolean isnumeric = true;
index = scandigits(str, index);
if(index < str.length)
else
}else
}else
}else if(str[index] == 'e' || str[index] == 'e')
else
}else
}else
return isnumeric;
}private boolean i***ponential(char str, int index)
while(index < str.length && str[index] >= '0' && str[index] <= '9')
return (index == str.length) ? true : false;
}private int scandigits(char str, int index)
return index;
}}
劍指offer 53 表示數值的字串
請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。本題的主要解題思路如下 首先判斷字串是否為空,或者首元素是否為 若是是則直接返回false 否...
劍指Offer53 表示數值的字串
思路 coding utf 8 class solution s字串 def isnumeric self,s write code here hase false sign false decimal false for i in range 0,len s if s i e or s i e i...
劍指offer(53)表示數值的字串
問題描述 請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。思路 1.正規表示式。正或負符號出現與否 d 整數部分是否出現,如 34 或 3.3...