我的任务是编写函数来格式化具有可配置重要性的双精度集(坐标)。我现在有:
public String dPath(int sign) {
return String.format ("%s %." + sign + "f %." + sign + "f", prefix, this.x, this.y);
}
有效:
Movement m = new Movement(3.14159265, 2.7654321);
Assert.assertEquals("m 3.142 2.765", m.dPath(3));
是否可以在没有字符串连接的情况下执行此操作?目前的实现看起来有点不自然,但这也可能归因于不自然的用例?
答案 0 :(得分:2)
只是为了好的措施。
return String.format(String.format("%%s %%.%df %%.%df", sign, sign),
prefix, this.x, this.y);
答案 1 :(得分:1)
也许是这样的?
public String dPath(int sign)
{
String pattern = "%s %.signf %.signf";
pattern = pattern.replaceAll("sign", String.valueOf(sign));
return String.format(pattern, prefix, this.x, this.y);
}
答案 2 :(得分:1)
可以使用MessageFormat,对于数字,可以使用单独的NumberFormat。代码有点多,但一个很好的方面是本地化:千位分隔符,法语的小数逗号,等等。
MessageFormat format = new MessageFormat("{0, string} {1, number} {2, number}");
if (0 > sign || sign > 10) {
sign = 3;
}
DecimalFormat decF = new DecimalFormat(".##########".substring(0, sign + 1);
format.setFormatByArgumentIndex(1, decF);
format.setFormatByArgumentIndex(2, decF);
return format.format(prefix, this.x, this.y);