簡體   English   中英

Java中的正則表達式以查找字符串是否為帶有尾隨零的十進制數字格式

[英]Regex in java to find if a String is in the format of a decimal number with a trailing zero

我正在閱讀一個字符串列表,其中一些采用小數形式,並將它們與另一個字符串共同映射。 可悲的是,在第一個列表中,我發現所有十進制術語(即所有字符串)都有一個額外的尾隨零。 因此,我的.equals()函數或.contains()函數不起作用。

List 1 : 134.20, 16, abacus, 44.10, 12/2/2013, 4, 45.220
List 2 : 134.2,  16, abacus, 44.2,  12/2/2013, 4, 45.22

如何在清單2中添加尾隨零? 是否可以使用正則表達式等以某種方式刪除尾隨零(如果存在)?

相反,我可以刪除列表1中的尾隨零嗎?

要從小數刪除尾隨零:

String zeroless = str.replaceAll("(\\b\\d+\\.[1-9]*)0+\\b", "$1");

要在沒有零的位置添加尾隨零:

String zeroless = str.replaceAll("(\\b\\d+\\.\\d*)[1-9]\\b", "$10");

此正則表達式的重要部分是用\\\\b “單詞邊界”進行換行。


我不確定這兩個都有用。 如果您嘗試查看字符串中是否包含特定的十進制數,請從中刪除尾隨零,然后在輸入中使用可選的尾隨零進行搜索,如下所示:

String num;  // eg 123.456
if (input.matches(".*\\b" + num.replace(".", "\\.").replaceAll("0+$", "") + "0*\\b.*")) {
    // input contains the number
}

這將讀取所有不必要的尾隨零:

str = str.replaceAll("(\\d+\\.\\d+?)0+", "$1");

例子:

123.456000 --> 123.456
123.000    --> 123.0

更新:在注釋中,您詢問了如何無條件附加零。 這是您的操作方式:

str = str.replaceAll("(\\d+\\.\\d+)", "$10");

您可以使用String.format()將它們全部取到多少個小數位。

String yourValue = "4.4";
int range = 3;
String zeros = String.format("%."+range+"f", Float.parseFloat(yourValue)); // 3 decimal places
System.out.println(zeros); // prints 4.400

根據需要更改范圍,以使所需的小數位數不同。

另外,如果您只是使用它們來檢查它們是否相等/更大/更少,那么為什么不將字符串解析為Double(或其他合適的對象),然后將Doubles進行比較,然后比較"2.2" == "2.20"無論如何,您可以為這些對象使用已經定義的equals()compareTo()

您應該使用BigDecimal來比較十進制值,而不是字符串。 擺脫正則表達式,使用新的BigDecimal(String),設置所需的小數compareTo(). ,然后使用compareTo().

暫無
暫無

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

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