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

Fle*_*seo 58 java string substring

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

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

    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.
Run Code Online (Sandbox Code Playgroud)

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

    124891, difference, 22.348, montreal
Run Code Online (Sandbox Code Playgroud)

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

    1248 diffe 22.348 montre
Run Code Online (Sandbox Code Playgroud)

我想我需要在构造函数中做一些强制字符串不超过一定数量字符的东西.我可能会将双打和整数转换为字符串,因此我可以强制执行最大宽度要求.

我不知道哪个方法可以做到这一点,或者是否可以实例化一个字符串以表现出来.使用格式化程序只能使用固定格式来打印字符串,但它实际上并不会切断超过最大长度的字符.

Jak*_*ksa 165

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

System.out.printf("'%3.3s' '%3.3s'", "abcdefgh", "a");
Run Code Online (Sandbox Code Playgroud)

会产生

'abc' '  a'
Run Code Online (Sandbox Code Playgroud)

显然没有引号.

  • 这应该是肯定的答案. (29认同)
  • use [`String.format(String format,Object ... args)`](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#format(java.lang) .String,%20java.lang.Object ...))作为一种更常见的方法 (4认同)

GET*_*Tah 77

用它来切断不需要的字符:

String.substring(0, maxLength); 
Run Code Online (Sandbox Code Playgroud)

例:

String aString ="123456789";
String cutString = aString.substring(0, 4);
// Output is: "1234" 
Run Code Online (Sandbox Code Playgroud)

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

int maxLength = (inputString.length() < MAX_CHAR)?inputString.length():MAX_CHAR;
inputString = inputString.substring(0, maxLength);
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为`inputString.substring(0,Math.min(MAX_CHAR,inputString.length()));`更具可读性. (28认同)

小智 29

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

if (inputString.length() > maxLength) {
    inputString = inputString.substring(0, maxLength);
}
Run Code Online (Sandbox Code Playgroud)

超过接受的答案.

int maxLength = (inputString.length() < MAX_CHAR)?inputString.length():MAX_CHAR;
inputString = inputString.substring(0, maxLength);
Run Code Online (Sandbox Code Playgroud)


小智 26

您可以使用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

  • 更简单:使用[左方法](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#left-java.lang.String-int- ). (8认同)
  • 添加库以截断字符串非常过分.此解决方案的注意事项是,只有在使用公共文件时才使用此方法 (2认同)

Ara*_*ade 20

您可以轻松地使用它

    shortString = longString.substring(0, Math.min(s.length(), MAX_LENGTH));
Run Code Online (Sandbox Code Playgroud)


Gib*_*olt 8

如果您只想要最大长度,请使用StringUtils.left! 不需要ifternary ?:不需要。

int maxLength = 5;
StringUtils.left(string, maxLength);
Run Code Online (Sandbox Code Playgroud)

输出:

      null -> null
        "" -> ""
       "a" -> "a"
"abcd1234" -> "abcd1"
Run Code Online (Sandbox Code Playgroud)

Left 文档