我在 Java Tapestry 中有一个打印 3 个文本块的页面,我们称它们为 BlockOfTextOne、BlockOfTextTwo、BlockOfTextThree。对于每个文本块,如果内容超过 170 个字符,我想截断内容并添加“阅读更多”链接。
我正在使用 Java 的方便BreakIterator
类来返回文本块的第一部分,在最接近 170 个字符的句子边界处剪切,然后从该边界返回文本块的第二部分。
我有这个为 BlockOfTextOne 工作。我想要关于使我的文本截断函数可对每个 BlockOfTextN 重复使用的建议,这样我就不需要重复代码。我也会感谢其他关于代码改进的建议,到目前为止,我所拥有的更多的是实验的结果,而不是专业知识。
这是我到目前为止所拥有的:
在 TML 文件中,我检查字符串是否超过允许的长度。如果是,运行 truncate 函数并打印 readmore 按钮。否则,只需打印字符串:
<t:if test="isQuestionTooLong()">
${getBeginningOfBlockOfTextOne()}
<button type="button" class="readmore">Read More</button>
<div>${getTheRestOfBlockOfTextOne()}</div>
<p:else>
${case.blockoftextwholestring}
</p:else>
</t:if>
在 .java 文件中,我得到了文本块的第一位:
public String getBeginningOfBlockOfTextOne() {
int summaryLength = blockoftextwholestring.length();
BreakIterator bi = BreakIterator.getSentenceInstance();
bi.setText(blockoftextwholestring);
int first_after = bi.following(MAX_LENGTH_TEXT_QUESTION);
String firstBit = blockoftextwholestring.substring(0, first_after);
return (firstBit);
}
然后我得到文本块的第二位,复制了大部分代码,基本上只更改了传递给子字符串的参数:
public String getTheRestOfBlockOfTextOne(){
BreakIterator bi = BreakIterator.getSentenceInstance();
bi.setText(blockoftextwholestring);
int first_after = bi.following(MAX_LENGTH_TEXT_QUESTION);
String secondBit = blockoftextwholestring.substring(first_after, summaryLength);
return (secondBit);
}
我知道我可以将这些分解为可重复使用的组件,但不知道最好的方法。我还希望能够为 BlockOfTextTwo 和 BlockOfTextThree 重新使用这两者。有什么建议么?