Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Collections;
- import java.util.LinkedList;
- import java.util.List;
- public class HtmlShortener {
- private static final String TAGS_TO_SKIP = "br,hr,img,link";
- private static final String[] tagsToSkip = TAGS_TO_SKIP.split(",");
- private static final int STATUS_READY = 0;
- private int cutPoint = -1;
- private String htmlString = "";
- final List<String> tags = new LinkedList<String>();
- StringBuilder sb = new StringBuilder("");
- StringBuilder tagSb = new StringBuilder("");
- int charCount = 0;
- int status = STATUS_READY;
- public HtmlShortener(String htmlString, int cutPoint){
- this.cutPoint = cutPoint;
- this.htmlString = htmlString;
- }
- public String cut(){
- // reset
- tags.clear();
- sb = new StringBuilder("");
- tagSb = new StringBuilder("");
- charCount = 0;
- status = STATUS_READY;
- String tag = "";
- if (cutPoint < 0){
- return htmlString;
- }
- if (null != htmlString){
- if (cutPoint == 0){
- return "";
- }
- for (int i = 0; i < htmlString.length(); i++){
- String strC = htmlString.substring(i, i+1);
- if (strC.equals("<")){
- // new tag or tag closure
- // previous tag reset
- tagSb = new StringBuilder("");
- tag = "";
- // find tag type and name
- for (int k = i; k < htmlString.length(); k++){
- String tagC = htmlString.substring(k, k+1);
- tagSb.append(tagC);
- if (tagC.equals(">")){
- tag = getTag(tagSb.toString());
- if (tag.startsWith("/")){
- // closure
- if (!isToSkip(tag)){
- sb.append("</").append(tags.get(tags.size() - 1)).append(">");
- tags.remove((tags.size() - 1));
- }
- } else {
- // new tag
- sb.append(tagSb.toString());
- if (!isToSkip(tag)){
- tags.add(tag);
- }
- }
- i = k;
- break;
- }
- }
- } else {
- sb.append(strC);
- charCount++;
- }
- // cut check
- if (charCount >= cutPoint){
- // close previously open tags
- Collections.reverse(tags);
- for (String t : tags){
- sb.append("</").append(t).append(">");
- }
- break;
- }
- }
- return sb.toString();
- } else {
- return null;
- }
- }
- private boolean isToSkip(String tag) {
- if (tag.startsWith("/")){
- tag = tag.substring(1, tag.length());
- }
- for (String tagToSkip : tagsToSkip){
- if (tagToSkip.equals(tag)){
- return true;
- }
- }
- return false;
- }
- private String getTag(String tagString) {
- if (tagString.contains(" ")){
- // tag with attributes
- return tagString.substring(tagString.indexOf("<") + 1, tagString.indexOf(" "));
- } else {
- // simple tag
- return tagString.substring(tagString.indexOf("<") + 1, tagString.indexOf(">"));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement