根据string长度修剪一个string
如果长度超过10个字符,我想修剪一个string。
假设如果string长度是12( String s="abcdafghijkl"
),那么新的修剪string将包含"abcdefgh.."
。
我怎样才能做到这一点?
s = s.substring(0, Math.min(s.length(), 10));
像这样使用Math.min
可避免在string已经小于10
的情况下出现exception。
笔记:
-
以上是真正的修剪。 如果实际上想要用点replace最后三个(!)字符,那么使用Apache Commons
StringUtils.abbreviate
。 -
如果您的string包含BMP以外的Unicode代码点,则这可能performance错误1 ; 如Emojis。 有关适用于所有Unicode代码点的解决scheme ,请参阅@ sibnick的解决scheme 。
1 – 不在平面0(BMP)上的Unicode代码点在String
表示为“代理对”(即两个char
值)。 通过忽略这一点,我们可以修剪到less于10个代码点,或者(更糟糕的)在代理对中间截断。 另一方面, String.length()
不再是衡量Unicode文本长度的一个理想方法,所以基于它的修改可能是错误的。
Apache Commons Lang库中的StringUtils.abbreviate
可能是您的朋友:
StringUtils.abbreviate("abcdefg", 6) = "abc..." StringUtils.abbreviate("abcdefg", 7) = "abcdefg" StringUtils.abbreviate("abcdefg", 8) = "abcdefg" StringUtils.abbreviate("abcdefg", 4) = "a..."
有一个StringUtils
函数可以做到这一点。
s = StringUtils.left(s, 10)
如果len字符不可用,或者String为空,那么String将被返回而没有exception。 如果len为负,则返回空string。
StringUtils.left(null, )= null
StringUtils.left( ,-ve)=“”
StringUtils.left(“”,*)=“”
StringUtils.left(“abc”,0)=“”
StringUtils.left(“abc”,2)=“ab”
StringUtils.left(“abc”,4)=“abc”
StringUtils.Left JavaDocs
礼貌:Steeve McCauley
s = s.length() > 10 ? s.substring(0, 9) : s;
像往常一样,没有人关心UTF-16代理对。 看看他们: 实际使用中最常见的非BMP Unicode字符是什么? 甚至是org.apache.commons / commons-lang3的作者
您可以在此示例中看到正确代码和常用代码之间的区别:
public static void main(String[] args) { //string with FACE WITH TEARS OF JOY symbol String s = "abcdafghi\uD83D\uDE02cdefg"; int maxWidth = 10; System.out.println(s); //do not care about UTF-16 surrogate pairs System.out.println(s.substring(0, Math.min(s.length(), maxWidth))); //correctly process UTF-16 surrogate pairs if(s.length()>maxWidth){ int correctedMaxWidth = (Character.isLowSurrogate(s.charAt(maxWidth)))&&maxWidth>0 ? maxWidth-1 : maxWidth; System.out.println(s.substring(0, Math.min(s.length(), correctedMaxWidth))); } }
或者你可以使用这个方法,以防你没有StringUtils:
public static String abbreviateString(String input, int maxLength) { if (input.length() <= maxLength) return input; else return input.substring(0, maxLength-2) + ".."; }
以防万一你正在寻找一种方法来修剪和保留string的最后10个字符。
s = s.substring(Math.max(s.length(),10) – 10);