0

我在 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

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

编辑:同样,我知道有更好的实现,例如避免使用字符串,但我使用字符串是有原因的(不要问我为什么)。

4

5 回答 5

3

我不会使用 String 也不会称它为Number常见的内置类型。你甚至可以用你的“数字”类来扩展 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.
}

您应该考虑使用 astatic factory来创建您的数字,就像 Integer 和 BigDecimal 和其他人所做的那样。

于 2013-01-11T15:26:44.893 回答
1

" 这个字符串永远是一个数字。"

这句话在我看来有些不对劲。如果您在内部表示一个数字,则应使用数字类型。根据您的需要,它可以是double、 anint或小数类型,例如BigDecimal.

当您需要在某处(并且仅在那时)打印该数字时,您应该将其转换为String. Java 提供了一组丰富的方法来格式化java.text.NumberFormat.

于 2013-01-11T15:28:08.473 回答
0

你可以重写类中的 tostring 方法

   public String toString() { 
   }

除非有其他原因来格式化数字

于 2013-01-11T15:26:52.517 回答
0

首先,在您的构造函数中,您可能会添加一个解析步骤来检查字符串的有效性(防御性编程,抛出 IllegalArgumentException 或临时 Exception 子类)。

然后,用 0 填充一个数字:如何在左边用零填充一个整数?

于 2013-01-11T16:12:05.870 回答
0

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

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

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

也许这对将来的任何人都有帮助。

于 2013-01-11T16:15:43.910 回答