Java - 使用格式化程序标志从左侧截断字符串

Mar*_*k W 12 java string-formatting

我有一个字符串,说:

String s = "0123456789";
Run Code Online (Sandbox Code Playgroud)

我想用格式化程序填充它.我可以这两种方式:

String.format("[%1$15s]", s); //returns [     0123456789]
Run Code Online (Sandbox Code Playgroud)

要么

String.format("[%1$-15s]", s); // returns [0123456789     ]
Run Code Online (Sandbox Code Playgroud)

如果我想截断我做的文字

String.format("[%1$.5s]", s);  // returns [01234]
Run Code Online (Sandbox Code Playgroud)

如果我想从左边截断,我想我可以这样做:

String.format("[%1$-.5s]", s); // throws MissingFormatWidthException
Run Code Online (Sandbox Code Playgroud)

但这失败了,所以我尝试了这个:

String.format("[%1$-0.5s]", s); // throws MissingFormatWidthException
Run Code Online (Sandbox Code Playgroud)

以及:

String.format("[%1$.-5s]", s); // throws UnknownFormatConversionException
Run Code Online (Sandbox Code Playgroud)

那么如何使用格式标志从左侧截断?

Dmi*_*yuk 9

我希望这是您需要的:

System.out.println("'" + String.format("%-5.5s", "") + "'");
System.out.println("'" + String.format("%-5.5s", "123") + "'");
System.out.println("'" + String.format("%-5.5s", "12345") + "'");
System.out.println("'" + String.format("%-5.5s", "1234567890.....") + "'");
Run Code Online (Sandbox Code Playgroud)

输出长度始终为5:

“” - 填充有5个空格
“” 123 之后填充有2位
“12345” - 等于
“12345” - 截断

此外:

System.out.println("'" + String.format("%5.5s", "123") + "'");
Run Code Online (Sandbox Code Playgroud)

输出:

'123' 之前有2个空格

  • 就截断字符串的右侧部分而言,这个答案是正确的,但是OP想要从左侧截断(不寻常,但这就是他想要的) (2认同)

aio*_*obe 7

-标志用于证明,并且似乎与截断没有任何关系.

.用于"精准",这显然转化为截断的字符串参数.

我不认为格式字符串支持从左侧截断.你不得不诉诸

String.format("[%.5s]", s.length() > 5 ? s.substring(s.length()-5) : s);
Run Code Online (Sandbox Code Playgroud)