Java字符串新行,具有特定逻辑,不带字符串格式

Java字符串新行,具有特定逻辑,不带字符串格式,java,Java,以下代码: 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 我需要的输出格式是小数点位置固定,无需使用任何字符串格式库(带逻辑): 变量值来自数据库,要求显示小数点位置与垂直方向相同的值。以下是使用流的示例;可能效率更高,但我玩得很开心 它假设所有的

以下代码:

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
我需要的输出格式是小数点位置固定,无需使用任何字符串格式库(带逻辑):


变量值来自数据库,要求显示小数点位置与垂直方向相同的值。

以下是使用流的示例;可能效率更高,但我玩得很开心

它假设所有的数字都有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);
});
我还将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);
}
String a=“100.00”;
字符串b=“10.00”;
字符串c=“5.00”;
列表字符串=数组.asList(a,b,c);
int maxLen=-1;
for(String s:strings)maxLen=Math.max(maxLen,s.length());
用于(字符串s:字符串){
字符串空格=”;
对于(int i=0;i
下面是一个使用流的示例;可能效率更高,但我玩得很开心

它假设所有的数字都有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);
});
我还将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);
}
String a=“100.00”;
字符串b=“10.00”;
字符串c=“5.00”;
列表字符串=数组.asList(a,b,c);
int maxLen=-1;
for(String s:strings)maxLen=Math.max(maxLen,s.length());
用于(字符串s:字符串){
字符串空格=”;
对于(int i=0;i
我不知道“不使用任何字符串格式库”的具体含义,但是。。。现在我们进入一个关于“库”是什么意思的语义争论。您正在格式化字符串。如果我回答你关于面值的问题,你问的是一个不可能的问题:如何在不格式化字符串的情况下格式化字符串

我假设您的意思是:不添加第三方依赖项

在这种情况下,如果有
双精度
(或
大十进制
浮点
)作为输入:

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

我不知道“不使用任何字符串格式库”的具体含义,但是。。。现在我们进入一个关于“库”是什么意思的语义争论。您正在格式化字符串。如果我回答你关于面值的问题,你问的是一个不可能的问题:如何在不格式化字符串的情况下格式化字符串

我假设您的意思是:不添加第三方依赖项

在这种情况下,如果有
双精度
(或
大十进制
浮点
)作为输入:

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

为什么没有字符串格式(假设您指的是
格式
方法)?这是一条显而易见的道路,你需要一个非常有力的理由来解释为什么你不想使用它。事实上,我在ABAP中遇到了这个问题,在那里我不能使用这种格式。所以我在寻找逻辑。找到你要打印的最长字符串,然后在每个其他字符串前面加上缺失的空格。需要一个循环逻辑是1)找到最长的字符串2)为每个字符串计算此字符串长度与最长字符串长度之间的差异3)用此差异构造一个空格字符串并将其连接到字符串尝试以下操作:
string value=a+“\n”+b+“\n”+c
:PWhy不带字符串格式(假设您指的是
格式
方法)?这是一条显而易见的道路,你需要一个非常有力的理由来解释为什么你不想使用它。事实上,我在ABAP中遇到了这个问题,在那里我不能使用这种格式。所以我在寻找逻辑。找到你要打印的最长字符串,然后在每个其他字符串前面加上缺失的空格。需要一个循环逻辑是1)找到最长的字符串2)为每个字符串计算此字符串长度与最长字符串长度之间的差异3)用此差异构造一个空格字符串并将其连接到字符串尝试以下操作:
string value=a+“\n”+b+“\n”+c:p这是需要的。谢谢你。但是我们能在没有java8的情况下得到这段代码吗?当然,添加了一个替代解决方案。这就是我们所需要的。谢谢你。但是我们能在没有java8的情况下得到这段代码吗?当然,添加了一个替代解决方案。