StringAbbreviator.java
2.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*
* 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();
}
}