如何在Java中的构造函数中设置默认的String格式?

时间:2013-01-11 15:22:07

标签: java string constructor format

我在Java中有一个使用字符串的构造函数。这个字符串总是一个数字。

private final String number;

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

由于这个字符串在我的情况下总是一个数字,我希望这个字符串总是使用某种格式。 例如,在我的main方法中创建一些新的数字时:

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

如何在构造函数中声明这样的格式(在我的情况下,它必须在构造函数中)?

编辑:再次,我知道有更好的实现,例如避免使用字符串,但我有理由使用字符串(不要问我为什么)。

5 个答案:

答案 0 :(得分:3)

我不会使用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以及其他人一样。

答案 1 :(得分:1)

“这个字符串总是一个数字。”

关于这句话的一些内容对我来说似乎不对。如果您在内部表示数字,则应使用数字类型。根据您的需求,可能是doubleint或小数类型,例如BigDecimal

如果您需要在某处(此时)打印该号码,则应将其转换为String。 Java提供了一组丰富的方法来格式化java.text.NumberFormat下的数字。

答案 2 :(得分:0)

你可以覆盖类

中的tostring方法
   public String toString() { 
   }

除非有其他理由格式化数字

答案 3 :(得分:0)

首先,在构造函数中,您可以添加一个解析步骤来检查String的有效性(防御性编程,抛出IllegalArgumentException或ad-hoc Exception子类)。

然后,填充0:How can I pad an integers with zeros on the left?

的数字

答案 4 :(得分:0)

好的,我想我终于在这篇文章中找到了答案: Left padding a String with Zeros

在我的情况下,这意味着构造函数:

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

这可能对将来的任何人都有帮助。