2013-07-03 66 views
4

我需要檢查用戶輸入是字符串還是數字。檢查以字母「F」結尾的用戶輸入是否是數字

我用下面的語句爲宗旨,

Double.parseDouble(string); 

它可以在大多數情況下,但未能當用戶輸入的輸入就像 123F

這應該是視爲一個字符串,但上述情況認爲它是一個數字。我甚至嘗試使用

NumberUtils.isNumber(string); 

但仍然行爲是相同的。

我試圖其中工程

"-?\\d+(\\.\\d+)?" 

但是是有相同的任何其他替代API以下正則表達式模式。

+2

它解析看起來像十六進制的東西。你期望什麼樣的輸入?是否允許非整數?科學計數法? – thegrinner

+0

@thegrinner:不允許使用非整數和科學記號。 –

回答

0

doc

有效數字的十六進制包括標有0X限定符, 科學記數法和數字標記類型限定符(例如 123L)。

因此123F似乎被檢測爲十六進制數。

您可以使用NumberUtils.isDigits(String s)方法,而不是

它檢查字符串是否只包含數字字符。

所以你的工作的代碼可以像

boolean b = NumberUtils.isDigits(string); 
if(!b) 
    // then all are digits 
+0

你是指NumberUtils.isDigits(String s)方法 –

+0

是的..抱歉speelinng錯誤 – stinepike

+1

如果用戶輸入是123.5怎麼辦我認爲NumberUtils.isDigits方法不會將其識別爲數字 –

1

簽出在文檔中列出Double.valueOf相當複雜的正則表達式。如果您需要對應用程序進行更嚴格的限制,則需要編寫自己的正則表達式。正如其他人指出的,使用Double.parseDouble允許許多事情,包括Infinity

0

如果我要支持浮點數與F後綴,我會做這樣的:

if (str.endsWith("F") || str.endsWith("f")) { 
    num = Double.parseDouble(str.substring(0, str.length() - 1)); 
} else { 
    num = Double.parseDouble(str); 
} 

不過,我建議你不要讓這一點。

「f」後綴不是標準的數學/科學形式。它在某些編程語言中只具有明確定義的含義......作爲數字文字源代碼的一個程序。在這種情況下,它表示帶有IEE單精度表示的浮點數。 (並且您試圖將其視爲double!)

避免這種潛在混淆的最佳方法(對於一些小的編程人員來說,他們不會理解數字和數字之間的區別),只需簡單地這是不好的投入。


但是是有相同的任何其它替代API。

AFAIK,no。主要是因爲格式並不合理。

相關問題