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

2022-09-03 13:52:40

我有一个字符串,说:

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

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


答案 1

我希望这是你需要的:

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''12345' 之后
填充 2 个空格 - 等于
'12345' - 截断

另外:

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

输出:

'123' 之前填充 2 个空格


答案 2

该标志用于辩护,似乎与截断没有任何关系。-

用于“精度”,这显然意味着字符串参数的截断。.

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

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

推荐