以下代码:
String a = "100.00";
String b = "10.00";
String c= "5.00";
String value = a+ "\n"+ b +"\n" +c;
System.out.println(value);
打印:
100.00
10.00
5.00
我需要以不使用任何字符串格式库(带逻辑)的小数点位置固定的格式输出:
100.00
10.00
5.00
可变值来自数据库,要求将小数点放在同一位置,垂直显示值。
答案 0 :(得分:3)
这是一个使用流的示例;可能会更有效率,但我很开心。
假设您所显示的所有小数点均为2位,仅供参考。可以修改。
String a = "100.00";
String b = "10.00";
String c= "5.00";
List<String> strings = Arrays.asList(a, b, c);
final int maxLen = strings.stream().map(String::length).reduce(Math::max).get();
strings.forEach(s -> {
System.out.println(Stream.generate(() -> " ").limit(maxLen - s.length()).collect(Collectors.joining()) + s);
});
结果:
100.00
10.00
5.00
我还将pthe 3个示例放入列表中,这样它就可以处理任意数量的元素。
没有Java 8
String a = "100.00";
String b = "10.00";
String c = "5.00";
List<String> strings = Arrays.asList(a, b, c);
int maxLen = -1;
for (String s : strings) maxLen = Math.max(maxLen, s.length());
for (String s : strings) {
String spaces = "";
for (int i = 0; i < maxLen - s.length(); ++i) {
spaces += " ";
}
System.out.println(spaces += s);
}
答案 1 :(得分:1)
我不知道“不使用任何String格式库”的具体含义,但是...现在,我们来了解一下“库”的含义的语义参数。您正在格式化字符串。如果我对您的面值提出疑问,那么您实际上是在问不可能的事情:一个人如何格式化字符串而不格式化字符串?
我将假设您的意思是:不添加第三方依赖项。
在这种情况下,如果您输入的是doubles
(或BigDecimal
或float
)
String.format("%6.2f", 100.00);
String.format("%6.2f", 10.00);
String.format("%6.2f", 5.00);
(6?是; 6!6是最少要打印的总字符数。您希望分隔符前3位,分隔符和后面2位,即总计6,因此为6。 )
如果您将字符串作为输入,那么显然您是在要求对它们进行右对齐吗?好吧,你可以这样做:
String.format("%6s", "100.00");
String.format("%6s", "10.00");
String.format("%6s", "5.00");
注意:为方便起见,System.out.printf("%6s\n", "100.0");
代表System.out.println(String.format("%6s", "100.0"));