/**
* Puts ellipses in input strings that are longer than than maxCharacters. Shorter strings or
* null is returned unchanged.
* @param input the input string that may be subjected to shortening
* @param maxCharacters the maximum characters that are acceptable for the unshortended string. Must be at least 3, otherwise a string with ellipses is too long already.
* @param charactersAfterEllipsis the number of characters that should appear after the ellipsis (0 or larger)
* @return the truncated string with trailing ellipses
*/
public static String ellipsize(String input, int maxCharacters, int charactersAfterEllipsis) {
if(maxCharacters < 3) {
throw new IllegalArgumentException("maxCharacters must be at least 3 because the ellipsis already take up 3 characters");
}
if(maxCharacters - 3 > charactersAfterEllipsis) {
throw new IllegalArgumentException("charactersAfterEllipsis must be less than maxCharacters");
}
if (input == null || input.length() < maxCharacters) {
return input;
}
return input.substring(0, maxCharacters - 3 - charactersAfterEllipsis) + "..." + input.substring(input.length() - charactersAfterEllipsis);
}
# 1 楼答案
根据您的用例,在字母之间加省略号可能会很有用(即在末尾加字母以提供一些上下文):
您可能还希望从省略号算法中获得更复杂的功能:如果需要将文本放置到图形元素中,并且使用比例字体,则必须测量字符串的长度
对于Swing/AWT,这将是
java.awt.Font.getStringBounds
。在这种情况下,一个简单的算法会将字符串一次剪切一个字母,并添加省略号,直到字符串符合给定的限制。如果经常使用,在http://www.codeproject.com/KB/cs/AutoEllipsis.aspx?msg=3278640(C#,但应该很容易翻译成Java)中详述的二分法可能会节省一些处理器周期# 2 楼答案
oneliner当然不会比其他提供的解决方案表现更好:
将只留下第一个和最后5个字符,并将。。。在中间。
# 3 楼答案
此方法将返回省略的字符串: