Here you can find the source of truncateText(String str, int lower, int upper, String appendToEnd)
public static String truncateText(String str, int lower, int upper, String appendToEnd)
//package com.java2s; public class Main { public static String truncateText(String str, int lower, int upper, String appendToEnd) { // strip markup from the string String str2 = removeHTML(str, false); // quickly adjust the upper if it is set lower than 'lower' if (upper < lower) { upper = lower;/* w w w . j av a 2s. c o m*/ } // now determine if the string fits within the upper limit // if it does, go straight to return, do not pass 'go' and collect $200 if (str2.length() > upper) { // the magic location int int loc; // first we determine where the next space appears after lower loc = str2.lastIndexOf(' ', upper); // now we'll see if the location is greater than the lower limit if (loc >= lower) { // yes it was, so we'll cut it off here str2 = str2.substring(0, loc); } else { // no it wasnt, so we'll cut it off at the upper limit str2 = str2.substring(0, upper); loc = upper; } // the string was truncated, so we append the appendToEnd String str = str2 + appendToEnd; } return str; } /** * Remove occurences of html, defined as any text between the characters * "<" and ">". Replace any HTML tags with a space. */ public static String removeHTML(String str) { return removeHTML(str, false); } /** * Remove occurences of html, defined as any text between the characters * "<" and ">". Optionally replace HTML tags with a space. * * @param str * @param addSpace * @return */ public static String removeHTML(String str, boolean addSpace) { if (str == null) return ""; StringBuffer ret = new StringBuffer(str.length()); int start = 0; int beginTag = str.indexOf("<"); int endTag = 0; if (beginTag == -1) return str; while (beginTag >= start) { if (beginTag > 0) { ret.append(str.substring(start, beginTag)); // replace each tag with a space (looks better) if (addSpace) ret.append(" "); } endTag = str.indexOf(">", beginTag); // if endTag found move "cursor" forward if (endTag > -1) { start = endTag + 1; beginTag = str.indexOf("<", start); } // if no endTag found, get rest of str and break else { ret.append(str.substring(beginTag)); break; } } // append everything after the last endTag if (endTag > -1 && endTag + 1 < str.length()) { ret.append(str.substring(endTag + 1)); } return ret.toString().trim(); } }