簡體   English   中英

匹配號碼,無限制的小數位數

[英]Match number with unlimited decimal places

我想檢查用戶輸入的數字是否有效(X.XXXXX)。

這是我的代碼:

if(textField.getText().matches("^[0-9][.]+[0-9]$"))
{
    System.out.println("This is a double");
}

如果用戶輸入5.5 ,則執行println 如果用戶在點( 5.5XXX... )后輸入5.55或帶有更多數字的數字,則它將不匹配。

如何定義一個正則表達式來匹配點后所有數字,無論多少?

您的加號+放錯了位置:

^[0-9][.]+[0-9]$

讓用戶輸入

5......1

您需要將其移至末尾:

[0-9][.][0-9]+

錨標記不是必需的,因為您正在使用matches()

請注意,此正則表達式過於簡單,因為它不支持負數,迫使用戶輸入.0表示整數,並且除其他事項外不允許科學計數法。 支持這些功能的正則表達式要復雜得多(有關示例,請參見此問答 )。 您最好使用內置的解析方法來檢查輸入是否有效。

這是您的正則表達式:

[+-]([0-9]*[.])?[0-9]+

這將接受

  • 123
  • 456.789
  • .555等

其他人已經提到過正則表達式解決方案(Danyal的解決方案到目前為止是最全面的)。 雙重的“真實”正則表達式非常復雜! 在這里看到這個問題:

有關SO的相關問題

但我認為您是在問一個錯誤的問題(盡管如此,仍然沒有一個解決科學符號):

您想要實現的是回答“此字符串是否是雙精度字符串?”。 現在,比正則表達式更具可讀性和整體“更好”的東西。

例如,如注釋中所述,您實際上可以嘗試解析該字符串,看看它是否無法解析。 這也是我鏈接的問題中的推薦方法,也是您應該遵循的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM