從表示為字串的數字中刪除無意義的零
一、簡介
在本教程中,我們將學習如何從String
表示的數字中刪除無意義的零,包括前導零和尾隨零。我們將探索實現這一目標的幾種方法,包括使用標準核心 Java 套件。
我們將在每個實作中使用正數和負數Strings
的範例。
2. 使用String
。 replaceAll()
首先,讓我們來看看String replaceAll()
方法。 replaceAll()
方法使用正規表示式模式來取代內容。我們將呼叫replaceAll()
方法來刪除String
中的前導零和尾隨零。
我們想要匹配String
開頭或結尾的所有零,並將它們替換為空String
。首先,我們將檢查String
是否包含點字元;我們將遞歸呼叫replaceAll()
方法來刪除輸入中的前導零和尾隨零。否則,我們只需從String
的開頭刪除零。
為了更好地理解,我們將舉一個十進制數的例子:
@Test
public void givenPositiveNumberString_whenUsingStringReplaceAll_thenInsignificantZeroRemoved() {
String positiveNumber = "001200.35000";
positiveNumber = positiveNumber.contains(".") ? positiveNumber.replaceAll("^(-?)0+(\\d+)", "$1$2")
.replaceAll("0+$", "")
.replaceAll("\\.$", ".0") : positiveNumber.replaceAll("^(-?)0+(\\d+)", "$1$2");
assertEquals("1200.35", positiveNumber);
}
@Test
public void givenNegativeNumberString_whenUsingStringReplaceAll_thenInsignificantZeroRemoved() {
String negativeNumber = "-0015.052200";
negativeNumber = negativeNumber.contains(".") ? negativeNumber.replaceAll("^(-?)0+(\\d+)", "$1$2")
.replaceAll("0+$", "")
.replaceAll("\\.$", ".0") : negativeNumber.replaceAll("^(-?)0+(\\d+)", "$1$2");
assertEquals("-15.0522", negativeNumber);
}
在這裡,第一個replaceAll()
方法呼叫將確保我們刪除String
開頭的所有零。如果它包含負號,我們需要將該符號與數字一起保留。第二次呼叫將從String
末尾刪除尾隨零。第三次呼叫檢查String
末尾是否只剩下一個點。如果是這樣,我們將用“.0”替換它以確保十進制數。
結果,我們將得到所需的String
,開頭或結尾不帶零。
3. 使用DecimalFormat
DecimalFormat
類別允許我們提供一種模式來根據我們的要求格式化數字。唯一的問題是它根據給定的模式限制小數點後的位數。
讓我們使用DecimalFormat
來刪除無意義的零。我們也會在DecimalFormat
中提供一個模式:
@Test
public void givenPositiveNumberString_whenUsingDecimalFormat_thenInsignificantZeroRemoved() {
String positiveNumber = "001200.35000";
positiveNumber = new DecimalFormat("0.0#####").format(Double.valueOf(positiveNumber));
assertEquals("1200.35", positiveNumber);
}
@Test
public void givenNegativeNumberString_whenUsingDecimalFormat_thenInsignificantZeroRemoved() {
String negativeNumber = "-0015.052200";
negativeNumber = new DecimalFormat("0.0#####").format(Double.valueOf(negativeNumber));
assertEquals("-15.0522", negativeNumber);
}
我們透過提供一個模式來建立了一個DecimalFormat
實例,我們將使用該模式來格式化給定的String.
在該模式中,我們使用“#”表示如果數字不為零,它將包含在輸出中或刪除,並且格式中“#”的數量表示它將格式化最大數量的數字小數位。
結果,我們得到開頭或結尾沒有零的String
。
4.使用BigDecimal
BigDecimal
類別提供了一種從給定String
中刪除無意義零的方法。預設情況下, BigDecimal
初始化將從字串中刪除前導零。 BigDecimal
提供了stripTrailingZeros()
方法,從String
中刪除尾隨零。將小數中的尾隨零去掉後,如果小數部分為空,那麼我們將得到沒有小數點的數字:
@Test
public void givenPositiveNumberString_whenUsingBigDecimal_thenInsignificantZeroRemoved() {
String positiveNumber = "001200.35000";
positiveNumber = new BigDecimal(positiveNumber).stripTrailingZeros()
.toPlainString();
assertEquals("1200.35", positiveNumber);
}
@Test
public void givenNegativeNumberString_whenUsingBigDecimal_thenInsignificantZeroRemoved() {
String negativeNumber = "-0015.052200";
negativeNumber = new BigDecimal(negativeNumber).stripTrailingZeros()
.toPlainString();
assertEquals("-15.0522", negativeNumber);
}
我們透過在參數中傳遞數字String
來建立BigDecimal
實例,然後呼叫stripTrailingZeros()
方法來刪除所有尾隨零。最後,我們呼叫toPlainString()
方法,該方法傳回僅包含有效零的String
。
5. 結論
在本文中,我們探索了從String
中刪除無意義的零的不同方法。我們也解釋了每種方法的各種限制。我們應該根據應用程式對數字表示的具體要求來選擇方法。
本文中的所有程式碼都可以在 GitHub 上取得。