Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 限制字符串中的字符数,并截断其余字符_Java_String_Substring - Fatal编程技术网

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

Java 限制字符串中的字符数,并截断其余字符,java,string,substring,Java,String,Substring,我需要在日志末尾创建一个摘要表,其中包含一些 是在类内获得的。这张桌子需要以固定宽度打印 格式。我已经有代码了,但是我需要限制字符串, 将双精度和整数转换为在代码中硬编码的固定宽度大小 所以,假设我想要打印一个固定宽度的表,使用 int,string,double,string int,string,double,string int,string,double,string int,string,double,string and the fixed

我需要在日志末尾创建一个摘要表,其中包含一些 是在类内获得的。这张桌子需要以固定宽度打印 格式。我已经有代码了,但是我需要限制字符串, 将双精度和整数转换为在代码中硬编码的固定宽度大小

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

    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
我想我需要在构造函数中做一些事情,强制 字符串不能超过一定数量的字符。我可能会 将double和int强制转换为字符串,这样我就可以强制执行最大宽度 要求

我不知道哪个方法会这样做,或者字符串是否可以实例化为 举止得体。使用格式化程序仅对 修复了打印字符串的格式问题,但实际上并没有
切掉超过最大长度的字符。

使用此选项可切掉不需要的字符:

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);
int maxLength=(inputString.length()

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

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

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

见:


对于可读性,我更喜欢这样:

if (inputString.length() > maxLength) {
    inputString = inputString.substring(0, maxLength);
}
超过公认的答案

int maxLength = (inputString.length() < MAX_CHAR)?inputString.length():MAX_CHAR;
inputString = inputString.substring(0, maxLength);
int maxLength=(inputString.length()
您也可以使用
字符串.format(“%3.3s”,“abcdefgh”)
。第一个数字是最小长度(如果字符串较短,则字符串将被左填充),第二个数字是最大长度,如果字符串较长,则字符串将被截断。所以

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

'abc' '  a'

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

解决方案可能是
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);
输出:

您想要的任何字符串w


任何简短的内容

您可以使用

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

如果您只需要最大长度,请使用
StringUtils.left
!如果
三元?:
需要,则无

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

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

嗯,也许我用错了。但它实际上并没有改变我的字符串的长度。我使用了格式化程序,但没有效果。它可以很好地打印内容,但不会更改字符串的长度:Formatter fmt=new Formatter();//声明成员的相应格式字符串hardCodedFormat=“%5s%5s”;//%20s串动车组项目;String name=“mynameis”;字符串名称2=“ted123”;格式(硬编码格式、名称、名称2);系统输出打印项次(fmt)@Flethuseo您应该能够截断字符串。试试这个:System.err.format(“%1$.5s”,“一个长字符串”);如果(ff.length()>7)ff=ff.substring(0,7);嗯。如果“精度”也适用于字符串,那就太好了。我认为
inputString.substring(0,Math.min(MAX_CHAR,inputString.length())
更具可读性。或者
inputString.substring(0,(inputString.length()>MAX_CHAR)?MAX_CHAR:inputString.length())
这与JDK 12中引入的String.transform()函数相结合是最好的:)甚至更简单:使用。此解决方案的注意事项是,仅当您已经使用CommonUse作为更常见的方法时才使用此方法。获取字符串的最后n个字符的字符串语法是什么?可能比
String::substring(0,max)
慢。但是,使用“%.20s”而不是“%20s”可以防止需要修剪