如何在Java中使用格式缩进

问题描述 投票:0回答:3

我希望使用 format 在 Java 中缩进打印行,但我对这个过程有点困惑。

我四处搜索并发现this,它提供了以下选项:

String prefix1 = "short text:";
String prefix2 = "looooooooooooooong text:";
String msg = "indented";
/*
 * The second string begins after 40 characters. The dash means that the
 * first string is left-justified.
 */
String format = "%-40s%s%n";
System.out.printf(format, prefix1, msg);
System.out.printf(format, prefix2, msg);

我通过以下方式在自己的代码中实现了它:

public class Main {

    public static void main(String[] args) {

        // Take in user input for report title
        System.out.println("Enter a title for this report");

        String msg = "=> ";
        String blank = "";

        String format = "%-4s%s%n";
        System.out.printf(format, blank, msg);
    }
}

我尝试用以下内容删除空白:

public class Main {

    public static void main(String[] args) {

        // Take in user input for report title
        System.out.println("Enter a title for this report");

        String msg = "=> ";

        String format = "%-4s%s%n";
        System.out.printf(format, msg);
    }
}

但是我在 IntelliJ IDEA 中收到以下错误:

线程“main”中的异常java.util.MissingFormatArgumentException: 格式说明符“%s”位于 java.base/java.util.Formatter.format(Formatter.java:2672) 位于 java.base/java.io.PrintStream.format(PrintStream.java:1053) 位于 java.base/java.io.PrintStream.printf(PrintStream.java:949) 位于 Main.main(Main.java:32)

我的问题是,为什么需要第一个字符串?有没有办法在不声明我拥有的“空白”变量的情况下做到这一点?如果这个问题在某个地方得到了回答,我深表歉意,我搜索了但找不到它。

这是我想要的输出:

Enter a title for this report
    =>
java
3个回答
3
投票

您只需更改格式字符串:

String format = "%8s%n";

删除一个

%s
,因为与示例代码相比,您传递的字符串少了一个,并且
8
是第二行的缩进。

使用值

8
因为
1 tab = 8 spaces


1
投票

这可能有用。

import java.util.Formatter;
public class Main {

public static void main(String[] args) {

    System.out.println("Enter a title for this report");
    String msg = "=>";
    String output = String.format("%6s\n",msg); //7 th line
    System.out.print(output);

    }
}

在第 7 行中,我指定了 (6s) 表示总字符串长度为 6。msg 的长度为 2,则剩余 4 个空格将分配到左侧(如果我们提到“-6”,则 4 个空格将分配到右侧) 到字符串 msg


0
投票

多行版本:

public static String indent(String text, int indent) {
    var whitespace = String.format("%" + indent + "s", " ");
    return whitespace + text.replaceAll("\\R", "\n" + whitespace);
}
© www.soinside.com 2019 - 2024. All rights reserved.