限制string中的字符数量,并删除其余字符

我需要在日志的末尾创build一个汇总表,其中包含一些在类中获取的值。 表格需要以固定宽度格式打印。 我已经有了这样的代码,但是我需要限制string,双精度和整数,以便在代码中硬编码的固定宽度的大小。

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

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 

需要打印的string应该是:

  1248 diffe 22.348 montre 

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

我不知道是哪一种方法,或者如果一个string可以被实例化的行为方式。 使用格式化程序只能帮助打印string的固定格式,但实际上并不会超过最大长度的字符。

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

 String.substring(0, maxLength); 

例:

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

为了确保在inputstring小于期望长度时没有发生IndexOutOfBoundsException,请执行以下操作:

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

如果你想你的整数和双打有一定的长度,那么我build议你使用NumberFormat格式化你的数字,而不是切断他们的string表示。

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

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

会产生

 'abc a' 

没有引号,显然。

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

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

在接受的答案。

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

您可以使用Apache Commons的StringUtils.substring(String str, int start, int end)静态方法,该方法也是null安全的。

请参阅: http : //commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#substring%28java.lang.String,%20int,%20int% 29

http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/src-html/org/apache/commons/lang/StringUtils.html#line.1961

你可以很容易的使用它

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

理想情况下,您应该尽量不要修改内部数据表示来创build表。 什么问题String.format()? 它会返回你所需要的宽度的新string。

解决scheme可能是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