首页 > 解决方案 > Java printf:如何通过转换隐式定义/声明空格?

问题描述

在Java中具有以下

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

它打印

     Hello There! 

左侧有 5 个空位。

直到这里它按预期工作,但是......

我想知道是否可能:如何避免""声明并更改%-5sprintf可以解释表示空白的内容?

我的意思是:例如%-5e,假设e代表一个字符,因此不再需要""显式声明。

类似于%n不需要通过printf. 很明显,%s需要一个参数,在这种情况下"",但很好奇我的请求是否可以完成。

我阅读了所需功能的Formatter javadoc,但似乎不存在。

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

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

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

标签: javastringjava-8formattingformat

解决方案


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

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

由于indent还规范了行终止字符,您还可以删除%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! 

推荐阅读