簡體   English   中英

如何在Java的構造函數中設置默認的String格式?

[英]How can I set a default String format in my constructor in Java?

我有一個使用字符串的Java構造函數。 該字符串將始終是數字。

private final String number;

public Number (String s) {
    this.number = s;
}

由於在我的情況下此字符串始終是數字,因此我希望此字符串始終使用某種格式。 例如,在我的main方法中創建一些新Numbers時:

public static void main (String[] args) {

    Number one = new Number("1");
    Number ten = new Number("10");

    System.out.println("Number one is: " + one);
    System.out.println("Number ten is: " + ten);
}

我希望它打印出這樣的內容:

Number one is: 000001
Number ten is: 000010

如何在構造函數中聲明這種格式(在我的情況下,必須在構造函數中)?

編輯:同樣,我知道還有更好的實現,例如只是避免使用字符串,但是有一些原因使我使用字符串(不要問我為什么)。

我不會使用String,也不會將其稱為Number ,這是一種常見的內置類型。 您甚至可以將您的“數字”類擴展為數字

class MyNumber extends Number {
     final long num;

     MyNumber(long num) { this.num = num; }

     public String toString() { return String.format("%06d", num); }

     // other number methods.
}

您應該考慮使用static factory來創建數字,就像Integer和BigDecimal以及其他方法一樣。

“此字符串將始終是數字。”

我覺得這句話有些不對勁。 如果在內部表示數字,則應使用數字類型。 根據您的需要,它可以是doubleint或小數類型,例如BigDecimal

當您需要將該數字打印在某個地方(僅此時)時,應將其轉換為String Java提供了一組豐富的方法來格式化java.text.NumberFormat下的數字。

您可以在類中重寫tostring方法

   public String toString() { 
   }

除非有其他原因格式化數字

首先,在構造函數中,您可以添加一個解析步驟來檢查String的有效性(防御性編程,拋出IllegalArgumentException或臨時Exception子類)。

然后,用0填充數字: 如何在左側填充零的整數?

好的,我想我終於在這篇文章中找到了答案: 左用零填充字符串

就我而言,這對構造函數意味着:

public Number(String s) {
    this.number = String.format("%06d", Integer.parseInt(s));
}

也許這對將來的任何人都有幫助。

暫無
暫無

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

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