回答
根據您的使用情況,將省略號放在字母(i。即在最後添加字母提供一些背景):
/**
* 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);
}
也有可能會從你省略號算法需要更復雜的功能:如果您需要將文本放入一個圖形元素,並且使用比例字體,那麼你必須測量字符串的長度。
對於Swing/AWT將是java.awt.Font.getStringBounds
。在這種情況下,一個簡單的算法會一次將字符串切成一個字母並添加省略號,直到字符串符合給定的限制。如果經常使用,在http://www.codeproject.com/KB/cs/AutoEllipsis.aspx?msg=3278640(C#,但應該很容易轉換爲Java)中闡述的二分法可以節省一些處理器週期。
我已經實現了你所建議的內容。謝謝! 我想我會嘗試提供一個通用的字符串橢圓化類,因爲現在我需要在類中快速入門,但值得花一些時間來開發一個好的API。 – 2010-07-20 12:37:15
我認爲你應該使用省略號字符,...,而不是三個點,可能會劃分在一行的末尾(appart從只有1長度而不是3) – 2012-10-17 11:51:27
@Wakka你是對的,如果省略號可用輸出,那麼它可能是一個不錯的選擇(例如當使用Swing時)。對於某些應用程序,也應該可接受三個點:如果目標不支持省略號字符(例如,如果輸出使用ISO-8859-1)或固定寬度的字體,其中省略號只需要一個寬度而不是3。 – 2012-10-17 14:06:29
沒有。但這是另一個簡單的方法來解決這個問題。
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) + "...";
}
這具有固定在國王的英語使用不當:-)
的bug利用這種方法將返回字符串ellipsized :
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個字符,並把...夾在中間。
- 1. Java:省略字符串中的字
- 2. 如何在Java中省略字符串的第一個字符?
- 3. 如何省略 - 在字符串中?
- 4. 省略了字符串標識'在Python
- 5. 在java中省略訪問說明符
- 6. 自動Unicode字符串在Java中
- 7. 在JSP中自動省略的空白
- 8. C程序省略字符
- 9. ASP.NET - 省略問號字符
- 10. NSRegularExpression省略某些字符
- 11. 如何在整數中省略0日期字符串
- 12. 如何在Silverlight TextBlock中使用省略號截斷字符串?
- 13. Java忽略字符串
- 14. CSS3省略號剪切字符串結尾不同的字符
- 15. XDocument到字符串:如何省略聲明中的編碼?
- 16. Annotation.toString()省略了字符串屬性中的雙引號
- 17. 如何省略字符串中的空格
- 18. 截斷表中的長字符串省略號html
- 19. 如何省略鏈接中的查詢字符串值
- 20. PHP將省略號插入字符串的中間(!)?
- 21. Realm數據庫在保存時省略字符串
- 22. getline()省略我的輸出字符串的第一個字母
- 23. 在字符串中移動字符而忽略編號
- 24. 如何驗證一個字符串是否通過java具有省略號(...)?
- 25. Rails:使用省略號自動鏈接?
- 26. 省略包含通用字符名稱的字符串文字的u8前綴
- 27. 如何在Python中省略換行符?
- 28. 動態字符串在java中
- 29. 在java方法中省略public修飾符
- 30. 由於PHP的短標籤PHP字符串省略文本
Nvm ... btw我怎樣才能刪除評論?... – Alderath 2010-07-20 09:47:19
'只是在Java中,而不是其他庫。「對不起,我應該開始閱讀這些問題:(儘管重用已有庫如' StringUtils'。這就是他們在這裏......它可以爲你節省一些工作。http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html – moxn 2010-07-20 10:14:06
@moxn thanks for鏈接,我不知道這些,不幸的是,我必須小心導入新的外部JAR,也用於許可問題(我工作的項目是封閉源代碼),這個似乎是Apache 2.0,所以它不應該是有一個問題,對嗎? – 2010-07-20 12:34:58