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

时间:2011-12-03 18:00:44

标签: 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.

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

    124891, difference, 22.348, montreal

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

    1248 diffe 22.348 montre

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

我不知道哪个方法可以执行此操作,或者是否可以将字符串实例化 表现得很好。使用格式化程序只能帮助 fixed-with format用于打印字符串,但实际上并没有 砍掉超过最大长度的字符。

9 个答案:

答案 0 :(得分:153)

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

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

将产生

'abc' '  a'

(显然你可以删除引号)。

答案 1 :(得分:71)

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

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

答案 2 :(得分:25)

答案 3 :(得分:25)

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

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

超过接受的答案。

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

答案 4 :(得分:18)

您可以使用

轻松完成此操作
    shortString = longString.substring(0, Math.min(s.length(), MAX_LENGTH));

答案 5 :(得分:2)

理想情况下,您应该尝试不修改内部数据表示以创建表。什么是String.format()的问题?它将返回所需宽度的新字符串。

答案 6 :(得分:2)

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

答案 7 :(得分:0)

如果只需要最大长度,请使用<stdint.h>!不需要StringUtils.leftif

ternary ?:

输出:

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

Left Documentation

答案 8 :(得分:0)

在Kotlin世界中,您可以执行以下操作:Int.coerseAtMost(max):

private const val MAX_CHAR = 500

val str = "My string with unknown length which should not exceed $MAX_CHAR character length."
val sLimited = str.substring(0..MAX_CHAR.coerceAtMost(str.length-1))