【发布时间】:2020-12-02 08:51:46
【问题描述】:
我的要求是根据某些条件截断具有最大计数的字符串。条件是,
- 字符串的长度不应超过最大计数
- 不应以半字结尾,如
I want to trun - 字符串的结尾应由
{" ",".",",",";",":","-","。","、",":",",",";"}中的以下任一字符决定,该字符必须替换为...
针对上述要求,我编写了代码,但是当字符串有两个连续的字符(如, 和; )时它会失败。我的代码如下,
public String getTruncateText(String text, int count) {
int textLength = text.length();
String truncatedText = text.substring(0, Math.min(count, textLength)).trim();
int index = StringUtils.lastIndexOfAny(truncatedText,
new String[] {" ",".",",",";",":","-","。","、",":",",",";"});
return truncatedText.substring(0, index > 0 ? index : truncatedText.length()) + "...";
}
@Test
public void Test() {
String text = "I want to truncate text, Test";
assertThat(getTruncateText(text, 15)).isEqualTo("I want to..."); //Success
assertThat(getTruncateText(text, 25)).isEqualTo("I want to truncate text..."); //Success
assertThat(getTruncateText(text, 1)).isEqualTo("I..."); //Success
assertThat(getTruncateText(text, 2)).isEqualTo("I..."); //Success
assertThat(getTruncateText(text, 300)).isEqualTo("I want to truncate text..."); //Failed
}
由于我是 JAVA 世界的新手,为糟糕的代码道歉... :)
提前致谢。干杯!!!
【问题讨论】:
-
getTruncateText(text, 300)的断言失败的输出是什么? -
@PIG208
I want to truncate text,... -
其实是一个相当合理的结果。 “,”之后的空格被发现是您的字符列表中的最后一个字符,因此它被用作截断字符串的结束索引。
-
@PIG208 我同意。如何更改我的代码以获得所需的结果?
标签: java apache-stringutils string-utils