java-限制字符串中的字符数,并切断res

我需要在日志末尾创建一个带有一些值的摘要表是在一个类中获得的。 表格需要以固定宽度打印格式。 我已经有执行此操作的代码,但是我需要限制字符串,整数并加倍为固定宽度的大小,该大小在代码中进行了硬编码。

因此,假设我要用

    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

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

我不知道这是哪个方法,或者是否可以实例化一个字符串表现方式。 使用格式化程序仅有助于用于打印字符串的固定格式,但实际上并没有截断超过最大长度的字符。

Flethuseo asked 2019-11-06T18:48:48Z
8个解决方案
162 votes

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

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

将产生

'abc' '  a'

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

Jaksa answered 2019-11-06T18:49:50Z
75 votes

使用它来剪掉不需要的字符:

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格式化数字,而不要切断其字符串表示形式。

GETah answered 2019-11-06T18:49:18Z
26 votes

为了提高可读性,我更喜欢这样:

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

超过可接受的答案。

int maxLength = (inputString.length() < MAX_CHAR)?inputString.length():MAX_CHAR;
inputString = inputString.substring(0, maxLength);
user3709124 answered 2019-11-06T18:50:20Z
25 votes

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

khriskooper answered 2019-11-06T18:50:57Z
19 votes

您可以使用以下方法轻松实现

    shortString = longString.substring(0, Math.min(s.length(), MAX_LENGTH));
Arade answered 2019-11-06T18:51:21Z
2 votes

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

Ashwinee K Jha answered 2019-11-06T18:51:45Z
2 votes

解决方案可能是Anything short,如下所示:

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);

输出:

Anything short

Anything short

Moesio answered 2019-11-06T18:52:23Z
1 votes

如果仅需要最大长度,请使用StringUtils.left! 不需要Leftternary ?:

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

输出:

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

Left文档

Gibolt answered 2019-11-06T18:52:56Z
translate from https://stackoverflow.com:/questions/8369708/limiting-the-number-of-characters-in-a-string-and-chopping-off-the-rest