限制字符串中的字符数,并砍掉其余字符

2022-08-31 12:57:14

我需要在日志的末尾创建一个摘要表,其中包含在类内获得的一些值。表格需要以固定宽度的格式打印。我已经有代码可以做到这一点,但我需要将字符串,双精度和整数限制为在代码中硬编码的固定宽度大小。

所以,假设我想打印一个固定宽度的表格

    int,string,double,string
    int,string,double,string
    int,string,double,string
    int,string,double,string

    and the fixed widths are: 4, 5, 6, 6.

如果值超过此宽度,则需要剪切掉最后一个字符。例如:

    124891, difference, 22.348, montreal

需要打印的字符串应该是:

    1248 diffe 22.348 montre

我想我需要在构造函数中做一些事情,强制字符串不超过一定数量的字符。我可能会将双精度和整数转换为字符串,以便我可以强制执行最大宽度要求。

我不知道哪个方法可以做到这一点,或者是否可以实例化字符串以以这种方式运行。使用格式化程序仅有助于打印字符串的固定格式,但它实际上不会切除超过最大长度的字符。


答案 1

您也可以使用 .第一个数字是最小长度(如果字符串较短,则将保留填充),第二个数字是最大长度,如果字符串较长,则字符串将被截断。所以String.format("%3.3s", "abcdefgh")

System.out.printf("'%3.3s' '%3.3s'", "abcdefgh", "a");

将产生

'abc' '  a'

(显然,您可以删除引号)。


答案 2

使用此选项可剪切掉不需要的字符:

String.substring(0, maxLength); 

例:

String aString ="123456789";
String cutString = aString.substring(0, 4);
// Output is: "1234" 

要确保在输入字符串小于预期长度时不会收到 IndexOutOfBoundsException,请改为执行以下操作:

int maxLength = (inputString.length() < MAX_CHAR)?inputString.length():MAX_CHAR;
inputString = inputString.substring(0, maxLength);

如果您希望整数和双精度具有一定的长度,那么我建议您使用NumberFormat来格式化数字,而不是切断它们的字符串表示形式。