Java实现两列平行格式打印变量的方法求助
解决Java两列平行打印对齐问题
完全没问题,你遇到的是格式化输出里很常见的对齐问题——原来的写法是给第二列固定了偏移,但第一列长度不固定,自然会把第二列挤得错位。咱们换个思路,给第一列设置固定宽度并左对齐,就能让第二列始终从同一个位置开始了。
方法一:固定第一列宽度(简单直接)
用%-Ns格式符,其中N是你想要给第一列预留的字符宽度,-表示左对齐(默认是右对齐,这也是你之前错位的原因之一)。比如给第一列留15个字符宽度:
// 示例变量 String var1 = "1)apple"; String var2 = "1)bad fruit"; System.out.printf("%-15s %s%n", var1, var2); var1 = "2)orange"; var2 = "2)good fruit"; System.out.printf("%-15s %s%n", var1, var2); var1 = "3)pig"; var2 = "3)animal"; System.out.printf("%-15s %s%n", var1, var2);
输出就会完美对齐:
1)apple 1)bad fruit 2)orange 2)good fruit 3)pig 3)animal
如果担心第一列字符串太长溢出,可以用%-15.15s,这样最多显示15个字符,超过部分会被截断,同时保持固定宽度。
方法二:动态计算第一列宽度(更灵活)
如果不知道第一列的最大长度(比如用户输入的内容长度完全不确定),可以先遍历所有要打印的var1,找到最长的那个的长度,然后动态生成格式化字符串:
import java.util.Arrays; import java.util.List; public class AlignPrint { public static void main(String[] args) { // 模拟用户输入的多组变量 List<String> var1List = Arrays.asList("1)apple", "2)orange", "3)pig", "4)watermelon"); List<String> var2List = Arrays.asList("1)bad fruit", "2)good fruit", "3)animal", "4)super good fruit"); // 找到最长的var1长度 int maxLength = var1List.stream().mapToInt(String::length).max().orElse(0); // 额外加2个空格作为列间距,让排版更美观 String format = "%-" + (maxLength + 2) + "s %s%n"; // 循环打印所有内容 for (int i = 0; i < var1List.size(); i++) { System.out.printf(format, var1List.get(i), var2List.get(i)); } } }
这种方法会自动适配第一列的最长长度,不管输入的var1是长是短,第二列都能稳稳对齐。
简单总结一下:核心就是让第一列占据固定宽度的位置,用左对齐保证文本靠左边,右边补空格,这样第二列的起始位置就固定了,自然实现两列平行的效果。
内容的提问来源于stack exchange,提问作者ZpfSysn
相关产品推荐
相关产品推荐

