從表示為字串的數字中刪除無意義的零
一、簡介
在本教程中,我們將學習如何從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 上取得。