【问题标题】:Method for padding string up to an arbitrary length将字符串填充到任意长度的方法
【发布时间】:2014-05-22 07:52:44
【问题描述】:

我在弄清楚如何填充从我的数组值打印的字符串时遇到问题。我认为我有一个很好的方法,但它不能正确读取 x.length,所以我很好奇替代方法,甚至对 bug 的解释。

import java.util.Scanner;
//================================================================
public class Array {
//----------------------------------------------------------------
    private static Scanner Keyboard = new Scanner(System.in);

    public static void main(String[] args) {
    //----------------------------------------------------------------
        char group, rLetter,letter;
        String choice ;
        String str = " ";
        double sum     =  0;
        int num     = 10; // for test
        int rows    = 10;
        int columns =  8;
        double average = 0;
        int S;
        int diff = 0;
        int totalChar=0;
        int minLen = 20;
        String x= "";

        // creating 2d array


        System.out.print("Please enter number of rows               : ");
        rows = Keyboard.nextInt();
        Keyboard.nextLine();


        double[][] figures = new double[rows][num];

        for(int t = 0; t < rows; t++) { 
            rLetter = (char)((t)+'A');
            System.out.print("Please enter number of positions in row " + rLetter + " : "); 
                columns = Keyboard.nextInt(); 
                Keyboard.nextLine(); 

            figures[t] = new double[columns]; 
        }

        // filling the array
        for(int row = 0; row < figures.length; ++row) {
            for(int col = 0; col < figures[row].length; ++col) {
                figures[row][col] = 0.0;
            }
        }

        // printing the array
        for(int row=0; row<figures.length; ++row) {
            // printing data row
            group = (char)((row)+(int)'A');
            System.out.print(group+" : ");
            for(int col=0; col<figures[row].length; ++col) {
                sum += figures[row][col];
                average = sum/figures[row].length;

                x = "   "+figures[row][col];
                diff = minLen - x.length();
                System.out.printf("%1$" + diff + "s", x);

                System.out.print(" ");

            }
            System.out.print("["+average+"]");
            System.out.println();


}
}
}

我想生成一个如下所示的表格:

A:   0.0   0.0   0.0                        -        [    0.0,     0.0]

B:   0.0   0.0   0.0   0.0                    -      [    0.0,     0.0]

C:   0.0   0.0   0.0   0.0   0.0           -         [    0.0,     0.0]

- 是我想用空格填充到任意长度的地方。换句话说,我希望我的打印数组部分能够打印每一行并将空格添加到一个点。是否有可能为此制定一种方法?我还不熟悉所有的 java 方法,因此感谢您的帮助。 如果这是一个重复的问题,我将不胜感激重定向到原始问题,我会尝试删除这个问题。也很抱歉给您带来不便。

【问题讨论】:

    标签: java arrays string padding


    【解决方案1】:

    我假设您知道如何使用StringBuilder 或字符串连接来构建左侧和右侧的字符串。

    一旦你建立了你的字符串,你可以使用printf 来在右边的输出中填充你想要的任意数量的空白字符。在下面的示例代码中,我使用了20 作为要填充的字符数。

    public class Pad {
        public static void main(String[] args) {
            String a = "0.0 0.0 0.0 ";
            String b = "0.0 0.0 0.0 0.0";
            String c = "[ 0.0, 0.0]";
            System.out.printf("%-20s %s\n", a, c);
            System.out.printf("%-20s %s\n", b, c);
        }
    }
    

    您可以在上面的代码中使用这个想法,将最后一个循环替换为:

        // printing the array
        for(int row=0; row<figures.length; ++row) {
            // printing data row
            StringBuilder sb = new StringBuilder();
    
            group = (char)((row)+(int)'A');
            sb.append(group+" : ");
            for(int col=0; col<figures[row].length; ++col) {
                sum += figures[row][col];
                average = sum/figures[row].length;
    
                x = "   "+figures[row][col];
                diff = minLen - x.length();
                sb.append(String.format("%1$" + diff + "s", x));
    
                sb.append(" ");
    
            }
            System.out.printf("%-75s[%f]\n", sb.toString(), average);
        }
    

    【讨论】:

    • 所以没有办法像我现在那样在for循环中做到这一点?
    • @user3505222,绝对有办法,但是你没有提供完整的可编译程序,我可以尝试调试。
    • 另外,我假设您将使用for 循环来构建字符串的左半部分和可能的右半部分。
    • 平均值显示为多位小数,否则原始问题已解决。
    • @user3505222,例如,您可以通过将%f 更改为%.2f 来编辑小数位数。
    【解决方案2】:

    您需要找到列大小的最大数量并在每行中迭代到最大列,如果长度小于实际行长度,则放置该值,否则放置空格。 它会解决这个问题。

    我已经添加了修改后的代码:

    public class Array {
    
        // String result = String.format("The format method is           %s!", "great");
        //  System.out.println(result);
        //----------------------------------------------------------------
        private static Scanner Keyboard = new Scanner(System.in);
    
        public static void main(String[] args) {
            //----------------------------------------------------------------
            char group, rLetter, letter;
            String choice;
            String str = " ";
            double sum = 0;
            int num = 10; // for test
            int rows = 10;
            int columns = 8;
            double average = 0;
            int S;
            int diff = 0;
            int totalChar = 0;
            int minLen = 20;
            String x = "";
    
            // creating 2d array
    
    
            System.out.print("Please enter number of rows               : ");
            rows = Keyboard.nextInt();
            Keyboard.nextLine();
    
    
            double[][] figures = new double[rows][num];
            int maxSize = 0;
            for (int t = 0; t < rows; t++) {
                rLetter = (char) ((t) + 'A');
                System.out.print("Please enter number of positions in row " + rLetter + " : ");
                columns = Keyboard.nextInt();
                Keyboard.nextLine();
                if (columns > maxSize) {
                    maxSize = columns;
                }
                figures[t] = new double[columns];
            }
    
            // filling the array
            for (int row = 0; row < figures.length; ++row) {
                for (int col = 0; col < figures[row].length; ++col) {
                    figures[row][col] = 0.0;
                }
            }
    
            // printing the array
            for (int row = 0; row < figures.length; ++row) {
                // printing data row
    
    
    
                group = (char) ((row) + (int) 'A');
                System.out.print(group + " : ");
                for (int col = 0; col < maxSize; ++col) {
                    if (col < figures[row].length) {
                        sum += figures[row][col];
                        average = sum / figures[row].length;
    
                        x = "   " + figures[row][col];
                        diff = minLen - x.length();
                        System.out.printf("%1$" + diff + "s", x);
    
                        System.out.print(" ");
                    } else {
                        System.out.print("               ");
                    }
                }
    
                System.out.print("[" + average + "]");
                System.out.println();
    
    
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-30
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 2018-05-27
      • 2016-01-31
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      相关资源
      最近更新 更多