限制字符串中的字符数,并截断其余字符

我需要在日志的末尾创建一个汇总表,其中包含一些值 表格需要以固定宽度打印 我已经有这样做的代码,但我需要限制字符串, 双精度和整型为固定宽度的大小,这在代码中是硬编码的。

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

    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

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

我不知道哪个方法执行此操作,或者一个字符串是否可以实例化为 使用格式化程序只会帮助 用于打印字符串的格式,但实际上它并不 删除超过最大长度的字符。

254652 次浏览

使用这个来切断不需要的字符:

String.substring(0, maxLength);

例如:

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

为了确保当输入字符串小于预期长度时不会出现 IndexOutOf 异常,请执行以下操作:

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

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

理想情况下,您应该尽量不要为了创建表而修改内部数据表示形式。String.format ()有什么问题?它将返回具有所需宽度的新字符串。

为了便于阅读,我更喜欢这样:

if (inputString.length() > maxLength) {
inputString = inputString.substring(0, maxLength);
}

超过公认的答案。

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

也可以使用 String.format("%3.3s", "abcdefgh")。第一个数字是最小长度(如果长度较短,字符串将留有空格) ,第二个数字是最大长度,如果长度较长,字符串将被截断。那么

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

会产生

'abc' '  a'

(当然,你可以删除引号)。

解决方案可能是 java.lang.String.format("%" + maxlength + "s", string).trim(),像这样:

int maxlength = 20;
String longString = "Any string you want which length is greather than 'maxlength'";
String shortString = "Anything short";
String resultForLong = java.lang.String.format("%" + maxlength + "s", longString).trim();
String resultForShort = java.lang.String.format("%" + maxlength + "s", shortString).trim();
System.out.println(resultForLong);
System.out.println(resultForShort);

产出:

Any string you want w

Anything short

您可以很容易地使用

    shortString = longString.substring(0, Math.min(s.length(), MAX_LENGTH));

如果你只是想要一个最大长度,使用 StringUtils.left! 不需要 ifternary ?:

int maxLength = 5;
StringUtils.left(string, maxLength);

产出:

      null -> null
"" -> ""
"a" -> "a"
"abcd1234" -> "abcd1"

Left文件