在我的程序中,我從控制檯讀取輸入並確定它是否是數字。 Numbers can be any decimal +-
。例如123.18p18不允許,因爲那裏有一個非數字,與-123.18p18一樣。這樣做的不好的方式(我現在正在做)是檢查它是否是一個雙重和捕捉異常,但因爲我只是解析一個字符串,我認爲正則表達式在這裏使用得更好。這是我使用它的第一天(正則表達式),它看起來像一種外來語言。我想出了".*\\D+.*"
但只處理正數。正則表達式,不包含非數字
編輯:整數也是可以接受的。
在我的程序中,我從控制檯讀取輸入並確定它是否是數字。 Numbers can be any decimal +-
。例如123.18p18不允許,因爲那裏有一個非數字,與-123.18p18一樣。這樣做的不好的方式(我現在正在做)是檢查它是否是一個雙重和捕捉異常,但因爲我只是解析一個字符串,我認爲正則表達式在這裏使用得更好。這是我使用它的第一天(正則表達式),它看起來像一種外來語言。我想出了".*\\D+.*"
但只處理正數。正則表達式,不包含非數字
編輯:整數也是可以接受的。
以下正則表達式可能適合您;
它定義與開始的圖形使用+或 - 後跟零個或多個數字,如果有小數點,那麼它必須遵循由至少一個數字
"^[+-]?\\d+(?:\\.?\\d+)$"
非轉義點將匹配任何字符。 – jlordo
@jlordo良好的抓住先生:) – AlanFoster
你必須用雙反斜線來逃避它,否則由於無效的轉義序列它不會編譯。 – jlordo
爲了解決您最初的問題,你可以使用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.
}
這是最好的方法.. – Anirudha
我假定不需要科學記數法?例如,1.2e3。會影響答案。 –