Here you can find the source of truncateHTML(String content, int len)
public static String truncateHTML(String content, int len)
//package com.java2s; //License from project: Apache License import org.jsoup.Jsoup; import org.jsoup.nodes.*; import org.jsoup.parser.Tag; import java.util.List; public class Main { public static String truncateHTML(String content, int len) { Document dirtyDocument = Jsoup.parse(content); Element source = dirtyDocument.body(); Document clean = Document.createShell(dirtyDocument.baseUri()); Element dest = clean.body(); truncateHTML(source, dest, len); return dest.outerHtml().replace("<body>", "").replace("</body>", ""); }/*from w w w .ja v a2s .c o m*/ private static void truncateHTML(Element source, Element dest, int len) { List<Node> sourceChildren = source.childNodes(); for (Node sourceChild : sourceChildren) { if (sourceChild instanceof Element) { Element sourceEl = (Element) sourceChild; Element destChild = createSafeElement(sourceEl); int txt = dest.text().length(); if (txt >= len) { break; } else { len = len - txt; } dest.appendChild(destChild); truncateHTML(sourceEl, destChild, len); } else if (sourceChild instanceof TextNode) { int destLeng = dest.text().length(); if (destLeng >= len) { break; } TextNode sourceText = (TextNode) sourceChild; int txtLeng = sourceText.getWholeText().length(); if ((destLeng + txtLeng) > len) { int tmp = len - destLeng; String txt = sourceText.getWholeText().substring(0, tmp) + "..."; TextNode destText = new TextNode(txt, sourceChild.baseUri()); dest.appendChild(destText); break; } else { TextNode destText = new TextNode(sourceText.getWholeText(), sourceChild.baseUri()); dest.appendChild(destText); } } } } private static Element createSafeElement(Element sourceEl) { String sourceTag = sourceEl.tagName(); Attributes destAttrs = new Attributes(); Element dest = new Element(Tag.valueOf(sourceTag), sourceEl.baseUri(), destAttrs); Attributes sourceAttrs = sourceEl.attributes(); for (Attribute sourceAttr : sourceAttrs) { destAttrs.put(sourceAttr); } return dest; } }