2014-10-27 44 views
0

我想要測試一個字符串是否在Java中使用正則表達式之後的兩個數字完全結束。如何實現這一目標?檢查字符串是否以正則表達式中的一個點之後的兩個數字結尾?

「500.23」應該返回true,而「50.3」或「50」應該返回false。

我試過類似"500.00".matches("/^[0-9]{2}$/")的東西,但它返回false。

+2

試試這個:( 「* \\ \\ d d」)''str.matches(不值得dignifying與回答這個問題,但是這可能會停止每個人都浪費時間) – Bohemian 2014-10-27 14:54:33

+0

類似於'。* \ d {3} \。\ d {2} $' – 2014-10-27 14:54:34

+2

這似乎很簡單。你現在一定已經嘗試了一些東西。 – 2014-10-27 14:54:40

回答

3

這裏是一個正則表達式,可以幫助你:

^\d+\.\d{2,2}$ 

它可能既不完美也不是最有效的,但它應該引領你在正確的方向。

^說,表達式應該從這裏開始
\d查找任何數字
+說,是領先的\ d可以根據需要隨時出現(1-無窮大)
\.意味着您期待在某一點的點(。)
\d{2,2}臨時TS的伎倆:它說你想2,準確2位數(不是少不宜多)
$告訴你,表達到此爲止(後2位)

在Java \需要如此轉義這將是:

^\\d*\\.\\d{2,2}$ 

編輯
如果你不點(.)之前,或者如果你真的不在乎什麼來點前需要數字,那麼你就可以取代第一\d+由提供如波希米亞人的回答。 (非轉義)點意味着該表達式可以包含任何字符(不僅是digets)。那麼即使是領先的^可能不再需要。

\\.*\\.\\d{2,2}$ 
+0

'\ d *'也會匹配零位;我想你可以通過使用'\ d {2}' – 2014-10-27 15:00:43

+0

@GyroGearless好點,使正則表達式更加隱密/更短。謝謝。我用+替換了*。關於{2}當然更短,但是當不經常使用RegEx(像我一樣)時,{min,max}符號更容易理解:) – GameDroids 2014-10-27 15:04:27

+0

OP沒有說輸入必須只有數字,所以'ABC.12'也應該通過 – Bohemian 2014-10-27 15:05:43

1

首先,正斜槓不是正規表達式的任何部分。然而,他們使用某些語言分隔正則表達式 - 但不是java,所以不要使用它們。

其次,在Java matches()必須整個字符串相匹配,返回真(所以^$在正則表達式暗示)。

試試這個:

if (str.matches(".*\\.\\d\\d")) 
    // it ends with dot then 2 digits 

注意,在Java中的正則表達式一個bash斜線需要由一個字符串字面進一步反斜槓逃逸。

+0

謝謝@波希米亞。請在其他答案中閱讀我的評論。謝謝 – 2014-10-27 15:14:18

+0

我已經做了......'* sob *' – Bohemian 2014-10-27 15:18:46

2

使用本regex

String s="987234.42"; 
    if(Pattern.matches("^\\d+(\\.\\d{2})$", s)){ // string must start with digit followed by .(dot) then exactly two digit. 
    .... 
    } 
相關問題