Java String具有特定逻辑且没有字符串格式的新行

问题描述 投票:0回答:2

以下代码:

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 

变量值来自数据库,并且要求显示具有垂直值的小数点在相同位置的值。

java
2个回答
3
投票

这是一个使用流的示例;可能会更有效但我很开心。

假设你所展示的全部都有2位小数,只是FYI;虽然可以修改。

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

我还将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
投票

我不知道'不使用任何String格式库'具体意味着什么,但是......现在我们进入一个关于'库'意味着什么的语义论证。你正在格式化一个字符串。如果我在面值上提出你的问题,你就要求字面意思是不可能的:如何在不格式化字符串的情况下格式化字符串?

我将假设你的意思是:不添加第三方依赖。

在这种情况下,如果你有doubles(或BigDecimalfloat)作为输入:

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"));的缩写

© www.soinside.com 2019 - 2024. All rights reserved.