劍指53題 表示數值的字串

2021-10-07 21:42:59 字數 949 閱讀 8614

請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100",「5e2」,"-123",「3.1416"和」-1e-16"都表示數值。 是「12e」,「1a3.14」,「1.2.3」,「±5」和「12e+4.3」都不是。

傳入的引數是乙個字元數值str,如果直接使用,需要逐個檢查陣列的元素,分類討論是否符合數值格式。這樣分類討論情況太複雜,不如將其轉為字串,使用正規表示式(事實上是懶得分類,看了別人題解,分類屬實難頂,以後重做劍指的時候再試,先立flag)

字元陣列轉字串不再贅述,看**

重點來了,如何設計正規表示式呢?根據給的示例,字串開頭應該是"+","-",數字3種,那麼正規表示式開始部分應該是「^[\\+|-]?\\d+」,該模式可匹配所有整數

如果是小數,需要匹配小數點,既加上「\\.?\\d+」(小數點後必須要跟數字)。

如果使用了科學計數法,則e/e前的部分可以是整數,也可以是小數,所以再加上「[e|e][\\+|-]?\\d+」綜合3、4、5步,正規表示式為「^[\\+|-]?\\d+(\\.?\\d+)?([e|e][\\+|-]?\\d+)?」。第乙個括號可去,加上思路更清晰。

你以為結束了嗎?我萬萬沒想到的是「.123」也表示數值。事實上,使用ieda在控制台輸出該字串時,結果為「0.123」,自動補零了(吐了)。沒辦法,只能再修改,將第乙個「\\d」後的「+」改為「*」即可,最終結果看**

public class solution 

boolean isdata = s.matches("^[\\+|-]?\\d*(\\.?\\d+)?([e|e][\\+|-]?\\d+)?");

return isdata;

}}

如果對正規表示式熟悉的話,題目並不難,後面會再出乙個正規表示式的總結

劍指53 表示數值的字串

請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。思路1 呼叫庫函式 通過呼叫double類的轉換成double型別的方法,判斷轉換的過程當中是...

劍指offer第53題 表示數值的字串

原始碼請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。class solution return true bool ispositivein...

劍指offer第53題 表示數值的字串

題目 請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。這個題的難點在 就是要我們對於數值類字串有乙個清晰的了解 比如,號出現的位置,出現的位置...