2013-02-05 38 views
0

在我的程序中,我從控制檯讀取輸入並確定它是否是數字。 Numbers can be any decimal +-。例如123.18p18不允許,因爲那裏有一個非數字,與-123.18p18一樣。這樣做的不好的方式(我現在正在做)是檢查它是否是一個雙重和捕捉異常,但因爲我只是解析一個字符串,我認爲正則表達式在這裏使用得更好。這是我使用它的第一天(正則表達式),它看起來像一種外來語言。我想出了".*\\D+.*"但只處理正數。正則表達式,不包含非數字

編輯:整數也是可以接受的。

+0

我假定不需要科學記數法?例如,1.2e3。會影響答案。 –

回答

2

您正在尋找用於:

"^[+-]?\\d+([.]\\d+)?$" 

可選在開始時加號或減號,後跟至少一位數字。在字符串結束之前,可以選擇一個點,然後至少一個數字。

+0

工作,謝謝! – arynaq

+0

'.123'呢? –

+0

@ ring0:不匹配。很容易實現它來匹配它。恕我直言,用戶不應該輸入「.123」,他應該輸入「0.123」,以確保前導點不是拼寫錯誤。 – jlordo

1

以下正則表達式可能適合您;

它定義與開始的圖形使用+或 - 後跟零個或多個數字,如果有小數點,那麼它必須遵循由至少一個數字

"^[+-]?\\d+(?:\\.?\\d+)$" 
+0

非轉義點將匹配任何字符。 – jlordo

+0

@jlordo良好的抓住先生:) – AlanFoster

+0

你必須用雙反斜線來逃避它,否則由於無效的轉義序列它不會編譯。 – jlordo

0

嘗試double doubleInstance = Double.parseDouble(string);,並繼續...

+0

扔'try catch'塊也... – nhahtdh

+0

try/catch是留給讀者的一個練習,應該已經表明了。雖然謝謝! – hd1

+0

它在問題中說,OP已經這樣做了。他正在專門尋找正則表達式解決方案。 – jlordo

2

爲了解決您最初的問題,你可以使用java.util.Scanner類。它提供了用於測試下一個輸入是整數,雙精度等還是測試下一個輸入是否符合給定正則表達式的方法。

import java.util.Scanner; 
//... 
Scanner s = new Scanner(System.in); 

while (s.hasNext()) { 
    if (s.hasNextInt()) { 
     int i = s.readInt(); 
     // Some work. 
    } else if (s.hasNextDouble()) { 
     double d = s.nextDouble(); 
     // Some work. 
    } else if (s.hasNext(regex)) { 
     String t = s.next(regex); 
     // Some work. 
    } 
    // etc. 
} 
+0

這是最好的方法.. – Anirudha

相關問題