我在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
如何在构造函数中声明这样的格式(在我的情况下,它必须在构造函数中)?
编辑:再次,我知道有更好的实现,例如避免使用字符串,但我有理由使用字符串(不要问我为什么)。答案 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)
“这个字符串总是一个数字。”
关于这句话的一些内容对我来说似乎不对。如果您在内部表示数字,则应使用数字类型。根据您的需求,可能是double
,int
或小数类型,例如BigDecimal
。
如果您需要在某处(此时)打印该号码,则应将其转换为String
。 Java提供了一组丰富的方法来格式化java.text.NumberFormat
下的数字。
答案 2 :(得分:0)
你可以覆盖类
中的tostring方法 public String toString() {
}
除非有其他理由格式化数字
答案 3 :(得分:0)
首先,在构造函数中,您可以添加一个解析步骤来检查String的有效性(防御性编程,抛出IllegalArgumentException或ad-hoc Exception子类)。
的数字答案 4 :(得分:0)
好的,我想我终于在这篇文章中找到了答案: Left padding a String with Zeros
在我的情况下,这意味着构造函数:
public Number(String s) {
this.number = String.format("%06d", Integer.parseInt(s));
}
这可能对将来的任何人都有帮助。