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

我有一个字符串,说:

String s = "0123456789"; 

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

 String.format("[%1$15s]", s); //returns [ 0123456789] 

要么

 String.format("[%1$-15s]", s); // returns [0123456789 ] 

如果我想截断我做的文字

 String.format("[%1$.5s]", s); // returns [01234] 

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

 String.format("[%1$-.5s]", s); // throws MissingFormatWidthException 

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

 String.format("[%1$-0.5s]", s); // throws MissingFormatWidthException 

以及:

 String.format("[%1$.-5s]", s); // throws UnknownFormatConversionException 

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

-标志用于certificate,并且似乎与截断没有任何关系。

这个. 用于“精度”,显然转换为字符串参数的截断。

我不认为格式字符串支持从左侧截断。 你不得不求助于

 String.format("[%.5s]", s.length() > 5 ? s.substring(s.length()-5) : s); 

我希望这是你需要的:

 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.....") + "'"); 

输出长度始终为5:

填充5个空格
‘123’之后 填充了2个空格
‘12345’等于
‘12345’截断

此外:

 System.out.println("'" + String.format("%5.5s", "123") + "'"); 

输出:

‘123’ 之前填充了2个空格

您还可以使用方法来操作字符串

 substring(startindex, endIndex) 

返回一个字符串对象,该对象启动指定的索引,但不包括结束索引。

并且还可以尝试使用StringBuilder类。