aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/juick/util/formatters/PlainTextFormatter.java
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2024-04-27 19:54:16 +0300
committerGravatar Vitaly Takmazov2024-04-27 21:45:00 +0300
commitf2421c1e8ed0a0c8392b179435d638ff55fe1551 (patch)
treec95ec31b18ec23498408b4c34a351dcfbb4c2cdd /src/main/java/com/juick/util/formatters/PlainTextFormatter.java
parent57fae6b2d4e2f94e49a3b809a47ef4abc2a1ef80 (diff)
Fix text truncation in reply quotes and Twitter posts
Diffstat (limited to 'src/main/java/com/juick/util/formatters/PlainTextFormatter.java')
-rw-r--r--src/main/java/com/juick/util/formatters/PlainTextFormatter.java25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/main/java/com/juick/util/formatters/PlainTextFormatter.java b/src/main/java/com/juick/util/formatters/PlainTextFormatter.java
index 9a885bca..2e7722e7 100644
--- a/src/main/java/com/juick/util/formatters/PlainTextFormatter.java
+++ b/src/main/java/com/juick/util/formatters/PlainTextFormatter.java
@@ -22,6 +22,7 @@ import com.juick.util.MessageUtils;
import org.apache.commons.lang3.StringUtils;
import org.ocpsoft.prettytime.PrettyTime;
+import java.text.BreakIterator;
import java.util.Date;
import java.util.Locale;
@@ -62,7 +63,7 @@ public class PlainTextFormatter {
sb.append(attachmentUrl).append("\n");
}
if (txt.length() >= cropLength) {
- sb.append(StringUtils.substring(txt, 0, cropLength)).append(" [...]");
+ sb.append(PlainTextFormatter.truncateText(txt, cropLength)).append(" [...]");
} else {
sb.append(txt);
}
@@ -97,4 +98,26 @@ public class PlainTextFormatter {
public static String formatTwitterCard(Message jmsg) {
return MessageUtils.getMessageHashTags(jmsg) + StringUtils.defaultString(jmsg.getText());
}
+ /**
+ * Truncate text to the nearest word, up to a maximum length specified.
+ *
+ * @param text
+ * @param maxLength
+ * @return
+ */
+ public static String truncateText(String text, int maxLength) {
+ if(text != null && text.length() > maxLength) {
+ BreakIterator bi = BreakIterator.getWordInstance();
+ bi.setText(text);
+
+ if(bi.isBoundary(maxLength-1)) {
+ return text.substring(0, maxLength-2);
+ } else {
+ int preceding = bi.preceding(maxLength-1);
+ return text.substring(0, preceding-1);
+ }
+ } else {
+ return text;
+ }
+ }
}