0

我在任何地方都找不到这个;我可能会用错误的关键字找到它。

图片画了一千个字,所以让我解释一下。

假设我们有一组未知数量的字符串:

String hello = "Hello world\n Welcome\n"
String goodbye = "Goodbye\n See you in the next life\n"
String do = "Do something\n Be part of us\n"

我想要一个产生这样结果的函数:

String hellogoodbyedo = "
  Hello world_________________Goodbye________________________Do Something\n
  Welcome_____________________See you in the next life_______Be part of us\n"

其中_表示空格。有这样做的聪明方法吗?

4

5 回答 5

5

您可以使用

System.out.printf("%-20s%-s20s%-20s%n", field1, field2, field3);
于 2012-04-29T18:02:59.753 回答
4

尝试使用制表符\t或计算每行中的字符数,并使用循环在每个单词之间生成空格。

编辑用 \n 分割每个变量,然后为每个 var 添加第一个实例,依此类推。

于 2012-04-29T18:03:11.103 回答
4

解决方案有两个部分。

您可以使用String.split() 在换行符上拆分每个字符串并将片段存储在数组中。

然后使用printforString.format()与其他答案中所示的格式字符串一起左对齐每个字符串:

String output = String.format("%-25s%-25s%-25s\n", string1, string2, string3);
于 2012-04-29T18:08:13.593 回答
3

假设

  • 输入是多个字符串
  • 每个字符串输入包含未知数量的行
  • 输出应该是输入中每个字符串一列,保留行尾
  • 输出列应该是与输入行长度匹配的可变宽度

方法

public static String printColumns(String[] input) {
  String result = "";

    // Split input strings into columns and rows
    String[][] columns = new String[input.length][];
    int maxLines = 0;
    for (int i = 0; i < input.length; i++) {
        columns[i] = input[i].split("\n");
        if (columns[i].length > maxLines)
            maxLines = columns[i].length;
    }

    // Store an array of column widths
    int[] widths = new int[input.length];
    // calculate column widths
    for (int i = 0; i < input.length; i++) {
        int maxWidth = 0;
        for (int j = 0; j < columns[i].length; j++)
            if (columns[i][j].length() > maxWidth)
                maxWidth = columns[i][j].length();
        widths[i] = maxWidth + 1;
    }

    // "Print" all lines
    for (int line = 0; line < maxLines; line++) {
        for (int column = 0; column < columns.length; column++) {
            String s = line < columns[column].length ? columns[column][line] : "";
            result += String.format("%-"+widths[column]+"s", s);
        }
        result += "\n";
    }
    return result;
}

用法

String hello = "Hello world\nWelcome\n";
String goodbye = "Goodbye\nSee you in the next life\n";
String dosomething = "Do something\nBe part of us\n";
String[] input = {hello, goodbye, dosomething};
System.out.println(printColumns(input));
于 2012-04-29T19:54:55.240 回答
2

在这里结帐printf()

于 2012-04-29T18:06:49.690 回答