You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何实现字符串左对齐与整数右对齐的格式化输出?双数组场景求助

解决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

火山引擎 最新活动