提问者:小点点

Java:如何通过转换隐式定义/声明空空间?


在Java有以下

printf("%-5s Hello %s %n", "", "There!")

它打印

     Hello There! 

其中左侧有5个空位。

在这之前,一切都按预期进行,但是。。。

我想知道是否有可能:如何避免“”声明,并将%-5s更改为printf可以解释的表示空白的内容?

我的意思是:例如%-5e,其中e被假定为表示空字符,因此不再需要显式声明“”

类似于%n,其中它不需要通过printf提供参数。 很清楚%s需要一个参数,在本例中是“”,但我想知道我的请求是否可以完成。

我阅读了格式化程序javadoc以获得所需的特性,但似乎并不存在。

我已经对SO进行了研究,一些建议的解决方案是在printf中使用+,但老实说,它降低了可读性

因此,目标是(格式化以更好地显示):

From: printf("%-5s Hello %s %n", "", "There!")
To:   printf("%-5e Hello %s %n",     "There!") // %-5e is the functionality I need or looking for

共1个答案

匿名用户

如果您使用的是Java 12或更高版本,并且您所需要的只是调整结果字符串的缩进,那么您可以使用string#indent。 使用您的示例在开头插入5个空格:

System.out.printf("Hello %s %n".indent(5),  "There!");

由于缩进也将行终止字符规范化,因此您也可以删除%n

System.out.printf("Hello %s ".indent(1),  "There!");
System.out.printf("Hello %s ".indent(2),  "There!");
System.out.printf("Hello %s ".indent(3),  "There!");
System.out.printf("Hello %s ".indent(4),  "There!");

获得以下内容:

 Hello There! 
  Hello There! 
   Hello There! 
    Hello There!