在Java中自动椭圆化字符串

Java中有一种自动椭圆化字符串的方法吗? 只是在Java中,而不是其他库。

谢谢。

根据您的使用情况,将省略号放在字母之间可能很有用(即在末尾添加字母以提供一些上下文):

 /** * 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); } 

省略号算法还有更复杂的function:如果需要将文本放入图形元素并使用比例字体,则必须测量字符串的长度。

对于Swing / AWT,它将是java.awt.Font.getStringBounds 。 在这种情况下,一个简单的algrithm会一次一个字母地剪切字符串并添加省略号,直到字符串符合给定的限制。 如果经常使用, http://www.codeproject.com/KB/cs/AutoEllipsis.aspx? msg=3278640(C#,但应该很容易转换为Java)中详述的二分法可以节省一些处理器周期。

此方法将返回ellipsized String:

 String ellipsize(String input, int maxLength) { String ellip = "..."; if (input == null || input.length() <= maxLength || input.length() < ellip.length()) { return input; } return input.substring(0, maxLength - ellip.length()).concat(ellip); } 

一个oneliner当然不会胜过其他提供的解决方案:

 longString.replaceFirst("(.{5}).+(.{5})", "$1...$2") 

将仅留下第一个和最后5个字符并将…放在中间。

那没有。 但是这是一个简单方法的另一个裂缝。

 String ellipsize(String input, int maxLength) { if (input == null || input.length() < maxLength) { return input; } return input.substring(0, maxLength) + "..."; } 

当然,试试这个:

 public static String ellipsise (String input, int maxLen) { if (input == null) return null; if ((input.length() < maxLen) || (maxLen < 3)) return input; return input.substring (0, maxLen - 3) + "..."; } 

这有利于修复国王英语未正确使用的错误:-)