StringAbbreviator.java 2.11 KB
/*
 * Decompiled with CFR 0_118.
 */
package com.day.text;

public class StringAbbreviator {
    public static final String SPACE = " ";
    public static final String DEFAULT_ELLIPSIS = "...";
    private String ellipsis = "...";

    public String abbreviate(String str, int maxLength) {
        if (str == null) {
            return null;
        }
        if (str.length() <= maxLength) {
            return str;
        }
        if (maxLength < this.ellipsis.length()) {
            return this.ellipsis.substring(0, maxLength);
        }
        int charsLeft = maxLength - this.ellipsis.length();
        String[] words = str.trim().split(" ");
        StringBuilder begin = new StringBuilder();
        StringBuilder end = new StringBuilder();
        if (words.length == 1) {
            StringAbbreviator.addUpTo(begin, words[0], true, charsLeft);
        } else {
            int i = 0;
            for (int j = words.length - 1; !(i > j || charsLeft <= 0 || begin.length() > 0 && (charsLeft = StringAbbreviator.addUpTo(begin, " ", true, charsLeft)) <= 0 || (charsLeft = StringAbbreviator.addUpTo(begin, words[i], true, charsLeft)) <= 0 || i == j || end.length() > 0 && (charsLeft = StringAbbreviator.addUpTo(end, " ", false, charsLeft)) <= 0 || (charsLeft = StringAbbreviator.addUpTo(end, words[j], false, charsLeft)) <= 0); ++i, --j) {
            }
        }
        StringBuilder sb = new StringBuilder();
        sb.append(begin.toString());
        sb.append(this.ellipsis);
        sb.append(end.toString());
        return sb.toString();
    }

    public void setEllipsis(String s) {
        this.ellipsis = s == null ? "..." : s;
    }

    public String getEllipsis() {
        return this.ellipsis;
    }

    private static int addUpTo(StringBuilder sb, String str, boolean appendAtEnd, int charsLeft) {
        if (str.length() > charsLeft) {
            str = appendAtEnd ? str.substring(0, charsLeft) : str.substring(str.length() - charsLeft, str.length());
        }
        if (appendAtEnd) {
            sb.append(str);
        } else {
            sb.insert(0, str);
        }
        return charsLeft - str.length();
    }
}