如何实现字符串左对齐与整数右对齐的格式化输出?双数组场景求助
解决Java数组对齐输出问题:国家名称与人口格式化
我来帮你搞定这个对齐输出的问题!核心思路就是先算出国家名称列的最大宽度,再用格式化字符串让每一行的内容对齐,下面是具体的实现步骤和完整代码:
步骤1:计算国家名称的最大宽度
要让所有国家名对齐,首先得知道最长的国家名有多少个字符。我们可以遍历国家数组,记录下最长的字符串长度:
int maxCountryWidth = 0; for (String country : countries) { if (country.length() > maxCountryWidth) { maxCountryWidth = country.length(); } }
步骤2:用格式化字符串输出对齐内容
Java的String.format()方法支持格式化占位符,其中%-ns表示左对齐并占用n个字符(不足的地方用空格补齐),完美适配我们的需求。结合计算好的最大宽度,就能生成整齐的输出:
for (int i = 0; i < countries.length; i++) { String formattedLine = String.format("%-" + maxCountryWidth + "s | %d", countries[i], populations[i]); System.out.println(formattedLine); }
完整可运行代码
把两部分结合起来,完整的代码如下:
public static void main(String[] args) { String[] countries = {"Egypt", "France", "Japan", "Switzerland"}; long[] populations = {92592000, 66991000, 126860000, 8401120}; // 计算国家名称的最大宽度 int maxCountryWidth = 0; for (String country : countries) { if (country.length() > maxCountryWidth) { maxCountryWidth = country.length(); } } // 格式化输出每一行 for (int i = 0; i < countries.length; i++) { String formattedLine = String.format("%-" + maxCountryWidth + "s | %d", countries[i], populations[i]); System.out.println(formattedLine); } }
输出效果
运行这段代码后,你会得到完全符合预期的对齐输出:
Egypt | 92592000 France | 66991000 Japan | 126860000 Switzerland | 8401120
如果你的原有代码没出预期结果,大概率是没动态计算最大宽度,或者用了默认的右对齐占位符(比如%s而不是%-ns),按照上面的方法调整就能解决啦!
内容的提问来源于stack exchange,提问作者Nomadsoul




