1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package com.ochafik.util.string;
20 import java.util.ArrayList;
21 import java.util.Arrays;
22 import java.util.LinkedList;
23 import java.util.List;
24 import java.util.StringTokenizer;
25 import java.util.regex.Matcher;
26 import java.util.regex.Pattern;
27 public class StringUtils {
28 public static String htmlize(String text) {
29 return text.startsWith("<?") || text.startsWith("<html>") ?
30 text : "<html><body>"+
31 text.replace("&", "&").replace("<", "<").replace(">", ">").replace("\n","<br>")+
32 "</body></html>";
33 }
34
35 static Pattern spacePattern;
36 public static List<String> explode(String s) {
37 if (spacePattern == null) {
38 spacePattern = Pattern.compile("\\s+");
39 }
40 return explode(s, spacePattern);
41 }
42 public static List<String> explode(String s, String sep) {
43 StringTokenizer st=new StringTokenizer(s,sep);
44 List<String> v = new ArrayList<String>();
45 for (;st.hasMoreTokens();) {
46 v.add(st.nextToken());
47 }
48 return v;
49 }
50
51
52
53
54
55
56 public static String implode(double[] array, String separator) {
57 StringBuffer out = new StringBuffer();
58 boolean first = true;
59 for (double v : array) {
60 if (first) first = false;
61 else out.append(separator);
62 out.append(v);
63 }
64 return out.toString();
65 }
66
67 public static String implode(Object[] values) {
68 return implode(values, ", ");
69 }
70 public static String implode(Object[] values, Object separator) {
71 return implode(Arrays.asList(values), separator);
72 }
73 public static final <T> String implode(Iterable<T> elements, Object separator) {
74 String sepStr = separator.toString();
75 StringBuilder out = new StringBuilder();
76 boolean first = true;
77 for (Object s : elements) {
78 if (s == null)
79 continue;
80
81 if (first)
82 first = false;
83 else
84 out.append(sepStr);
85 out.append(s);
86 }
87 return out.toString();
88 }
89 public static final String implode(Iterable<?> strings) {
90 return implode(strings, ", ");
91 }
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112 public static final List<String> explode(String string, Pattern separator) {
113 int lastIndex = 0, len = string.length();
114
115 Matcher matcher = separator.matcher(string);
116 List<String> ret = new LinkedList<String>();
117
118 while (matcher.find()) {
119 String s = string.substring(lastIndex, matcher.start());
120 if (s.length() > 0) ret.add(s);
121 lastIndex = matcher.end();
122 }
123 String s = string.substring(lastIndex, len);
124 if (s.length() > 0) ret.add(s);
125
126 return ret;
127 }
128
129 public static String replace(String pattern, String replace, String s) {
130 return concatWithSeparator(explode(s,pattern).toArray(new String[0]),replace);
131 }
132 public static final String concat(String[] a) {
133 StringBuffer b=new StringBuffer();
134 for (int i=0;i<a.length;i++) b.append(a[i]);
135 return b.toString();
136 }
137 public static final String concatln(String[] a) {
138 StringBuffer b=new StringBuffer();
139 int lenm=a.length-1;
140 for (int i=0;i<lenm;i++) {
141 b.append(a[i]);
142 b.append("\n");
143 }
144 if (lenm!=-1) b.append(a[lenm]);
145 return b.toString();
146 }
147 public static final String concatSpace(String[] a) {
148 StringBuffer b=new StringBuffer();
149 int lenm=a.length-1;
150 for (int i=0;i<lenm;i++) {
151 b.append(a[i]);
152 b.append(" ");
153 }
154 if (lenm!=-1) b.append(a[lenm]);
155 return b.toString();
156 }
157 public static final String concatWithSeparator(String[] a,String sep) {
158 StringBuffer b=new StringBuffer();
159 int lenm=a.length-1;
160 for (int i=0;i<lenm;i++) {
161 b.append(a[i]);
162 b.append(sep);
163 }
164 if (lenm!=-1) b.append(a[lenm]);
165 return b.toString();
166 }
167 public static final String javaEscape(String s) {
168 if (s == null)
169 return null;
170 char c;
171 int len=s.length();
172 StringBuffer b=new StringBuffer(len);
173 for (int i=0;i<len;i++) {
174 c=s.charAt(i);
175 switch (c) {
176 case '\n':
177 b.append("\\n");
178 break;
179 case '\t':
180 b.append("\\t");
181 break;
182 case '\r':
183 b.append("\\r");
184 break;
185 case '"':
186 b.append("\"");
187 break;
188 case '\\':
189 b.append("\\\\");
190 break;
191 default:
192 if (c>127||Character.isISOControl(c)) {
193 b.append("\\u");
194 String nb=Integer.toString((int)c,16);
195 int nblen=nb.length();
196 switch (nblen) {
197 case 1:
198 b.append(0);
199 case 2:
200 b.append(0);
201 case 3:
202 b.append(0);
203 case 4:
204 b.append(nb);
205 break;
206 default:
207 throw new IllegalArgumentException("Should not happen !");
208 }
209 } else b.append(c);
210 }
211 }
212 return b.toString();
213 }
214 public static final String javaUnEscape(String s) {
215 char c;
216 int len=s.length();
217 StringBuffer b=new StringBuffer(len);
218 for (int i=0;i<len;i++) {
219 c=s.charAt(i);
220 if (c=='\\') {
221 c=s.charAt(++i);
222 switch (c) {
223 case 'n':
224 b.append('\n');
225 break;
226 case 'r':
227 b.append('\r');
228 break;
229 case 't':
230 b.append('\t');
231 break;
232 case '\\':
233 b.append('\\');
234 break;
235 case '"':
236 b.append('"');
237 break;
238 case '\'':
239 b.append('\'');
240 break;
241 case 'u':
242 try {
243 String nb=s.substring(i+1,i+5);
244 int n=Integer.parseInt(nb,16);
245 b.append((char)n);
246 i+=4;
247 } catch (Exception ex) {
248 throw new IllegalArgumentException("Illegal unicode escaping in string \"" + s + "\" at index " + i, ex);
249 }
250 break;
251 default:
252 throw new IllegalArgumentException("Unknown character: \"\\"+String.valueOf(c)+"...\"");
253 }
254 } else b.append(c);
255 }
256 return b.toString();
257 }
258
259 public static String capitalize(String string) {
260 return string == null ? null : string.length() == 0 ? "" : Character.toUpperCase(string.charAt(0)) + string.substring(1);
261 }
262 public static String capitalize(List<String> strings, String separator) {
263 List<String> cap = new ArrayList<String>(strings.size());
264 for (String s : strings)
265 cap.add(capitalize(s));
266 return implode(cap, separator);
267 }
268
269 public static String uncapitalize(String string) {
270 return string.length() == 0 ? "" : Character.toLowerCase(string.charAt(0)) + string.substring(1);
271 }
272 public static final String LINE_SEPARATOR;
273 static {
274 LINE_SEPARATOR = System.getProperty("line.separator");
275 }
276
277 }