You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java字符串对齐问题:如何合并三次方法调用实现列对齐

字符串对齐与三次方法调用结果合并方案

问题背景

需要实现名称与三个数字的对齐输出,要求必须调用placeNumberToRank方法三次,且该方法返回原字符串 + 空格 + 数字的格式。现有代码会将每个数字单独打印一行,不符合目标输出格式。

现有代码

public static void main(String[] args) {
    final String[] NAMES = {"Spa reine 25cl","Bru plate 50cl","Bru pét 50cl",
            "Pepsi","Spa orange", "Schweppes Tonic","Schweppes Agr","Ice Tea","Ice Tea Pêche",
            "Jus d'orange Looza", "Cécémel", "Red Bull"};
    int[][] stock = {{1,56,200,55},{2,42,200,60},{3,62,200,125},{4,45,200,150},{5,25,200,140},{6,72,200,86},{7,40,200,47},{8,48,200,80},{9,24,150,75},{10,36,200,90},{11,15,100,55},{12,25,80,23}};
    
    for(int i = 0; i<NAMES.length;i++) {
        String space1 = placeNumberToRank(NAMES[i], Integer.toString(stock[i][1]), 35);
        String space2 = placeNumberToRank(NAMES[i], Integer.toString(stock[i][2]), 40);
        String space3 = placeNumberToRank(NAMES[i], Integer.toString(stock[i][3]), 45);
        System.out.println(space1);
        System.out.println(space2);
        System.out.println(space3);
        }
        
    }
public static String placeNumberToRank(String originalStr, String numberToPlace, int rank) {
    int numberOfSpaces = 0;
    numberOfSpaces = rank - originalStr.length() - numberToPlace.length();
    return originalStr+" ".repeat(numberOfSpaces)+numberToPlace;
}
}

目标输出

Spa reine 25cl                   56  200   55
Bru plate 50cl                   42  200   60
Bru pét 50cl                     62  200  125
Pepsi                            45  200  150
Spa orange                       25  200  140
Schweppes Tonic                  72  200   86
Schweppes Agr                    40  200   47
Ice Tea                          48  200   80
Ice Tea Pêche                    24  150   75
Jus d'orange Looza               36  200   90
Cécémel                          15  100   55
Red Bull                         25   80   23

解决方案

核心思路是利用placeNumberToRank方法返回的字符串总长度等于传入的rank参数这一特性,通过截取后续调用结果的尾部内容,将三个部分拼接成一行:

  1. 调用三次方法分别得到包含三个数字的完整字符串
  2. 取第一次调用的结果作为行的前缀(包含名称和第一个对齐的数字)
  3. 从第二次调用的结果中截取第35位到末尾的部分(对应第二个对齐的数字及前置空格)
  4. 从第三次调用的结果中截取第40位到末尾的部分(对应第三个对齐的数字及前置空格)
  5. 将三部分拼接后打印

修改后的main方法代码如下:

public static void main(String[] args) {
    final String[] NAMES = {"Spa reine 25cl","Bru plate 50cl","Bru pét 50cl",
            "Pepsi","Spa orange", "Schweppes Tonic","Schweppes Agr","Ice Tea","Ice Tea Pêche",
            "Jus d'orange Looza", "Cécémel", "Red Bull"};
    int[][] stock = {{1,56,200,55},{2,42,200,60},{3,62,200,125},{4,45,200,150},{5,25,200,140},{6,72,200,86},{7,40,200,47},{8,48,200,80},{9,24,150,75},{10,36,200,90},{11,15,100,55},{12,25,80,23}};
    
    for(int i = 0; i<NAMES.length;i++) {
        String part1 = placeNumberToRank(NAMES[i], Integer.toString(stock[i][1]), 35);
        String part2 = placeNumberToRank(NAMES[i], Integer.toString(stock[i][2]), 40);
        String part3 = placeNumberToRank(NAMES[i], Integer.toString(stock[i][3]), 45);
        // 拼接三部分内容,实现一行输出
        String line = part1 + part2.substring(35) + part3.substring(40);
        System.out.println(line);
    }
}

public static String placeNumberToRank(String originalStr, String numberToPlace, int rank) {
    int numberOfSpaces = rank - originalStr.length() - numberToPlace.length();
    return originalStr+" ".repeat(numberOfSpaces)+numberToPlace;
}

说明

  • 该方案严格遵守了必须调用三次placeNumberToRank方法的要求
  • 利用字符串截取实现了数字的对齐,完全匹配目标输出格式
  • 无需修改placeNumberToRank方法的逻辑,仅调整main方法的输出拼接逻辑即可

内容的提问来源于stack exchange,提问作者Oddy36

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:35:25