我需要在日志末尾创建一个汇总表,其中包含一些值 在课堂上获得。桌子需要以固定宽度打印 格式。我已经有了这样做的代码,但我需要限制字符串, 在代码中硬编码的固定宽度大小的双精度和整数。
所以,假设我想用
打印一个固定宽度的表 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用于打印字符串,但实际上并没有 砍掉超过最大长度的字符。
答案 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)
您可以使用Apache Commons StringUtils.substring(String str, int start, int end)
静态方法,该方法也是null安全的。
答案 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.left
或if
。
ternary ?:
输出:
int maxLength = 5;
StringUtils.left(string, maxLength);
答案 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))