1 9 package com.vladium.util; 10 11 import java.io.File ; 12 import java.io.IOException ; 13 import java.util.ArrayList ; 14 import java.util.HashSet ; 15 import java.util.List ; 16 import java.util.Set ; 17 import java.util.StringTokenizer ; 18 19 23 public 24 abstract class Strings 25 { 26 28 29 public static final String WHITE_SPACE = " \t\r\n"; 30 31 32 public static String toListForm (final String [] strings, final char delimiter) 34 { 35 if (strings == null) return null; 36 if (strings.length == 0) return ""; 37 38 final StringBuffer s = new StringBuffer (); 39 for (int i = 0, iLimit = strings.length; i < iLimit; ++ i) 40 { 41 if (i != 0) s.append (delimiter); 42 s.append (strings [i]); 43 } 44 45 return s.toString (); 46 } 47 48 public static String [] removeDuplicates (final String [] strings, final boolean removeNull) 49 { 50 if (strings == null) return strings; 51 52 final int length = strings.length; 53 if (length == 0) return strings; 54 55 final Set _strings = new HashSet (length); 56 final List _result = new ArrayList (length); 57 58 for (int i = 0; i < length; ++ i) 59 { 60 final String s = strings [i]; 61 if (removeNull && (s == null)) continue; 62 63 if (_strings.add (s)) _result.add (s); 64 } 65 66 final int resultLength = _result.size (); 67 if (resultLength == length) 68 return strings; 69 else 70 { 71 final String [] result = new String [resultLength]; 72 _result.toArray (result); 73 74 return result; 75 } 76 } 77 78 86 public static String [] merge (final String [] strings, final String delimiters, final boolean removeNull) 87 { 88 if (strings == null) return strings; 89 90 final int length = strings.length; 91 if (length == 0) return strings; 92 93 if ((delimiters == null) || (delimiters.length () == 0)) 94 throw new IllegalArgumentException ("null/empty input: delimiters"); 95 96 final Set _strings = new HashSet (length); 97 final List _result = new ArrayList (length); 98 99 for (int i = 0; i < length; ++ i) 100 { 101 final String s = strings [i]; 102 if (removeNull && (s == null)) continue; 103 104 final StringTokenizer tokenizer = new StringTokenizer (s, delimiters); 105 while (tokenizer.hasMoreTokens ()) 106 { 107 final String ss = tokenizer.nextToken (); 108 if (_strings.add (ss)) _result.add (ss); 109 } 110 } 111 112 final String [] result = new String [_result.size ()]; 113 _result.toArray (result); 114 115 return result; 116 } 117 118 126 public static String [] mergeAT (final String [] strings, final String delimiters, final boolean processAtFiles) 127 throws IOException 128 { 129 if (! processAtFiles) 130 return merge (strings, delimiters, true); 131 else 132 { 133 if (strings == null) return strings; 134 135 final int length = strings.length; 136 if (length == 0) return strings; 137 138 if ((delimiters == null) || (delimiters.length () == 0)) 139 throw new IllegalArgumentException ("null/empty input: delimiters"); 140 141 final Set _strings = new HashSet (length); 142 final List _result = new ArrayList (length); 143 144 for (int i = 0; i < length; ++ i) 145 { 146 final String s = strings [i]; 147 if (s == null) continue; 148 149 final StringTokenizer tokenizer = new StringTokenizer (s, delimiters); 150 while (tokenizer.hasMoreTokens ()) 151 { 152 final String ss = tokenizer.nextToken (); 153 154 if (ss.startsWith ("@")) 155 { 156 final String [] fileList = Files.readFileList (new File (ss.substring (1))); 157 for (int j = 0; j < fileList.length; ++ j) 158 { 159 final String sss = fileList [j]; 160 if (_strings.add (sss)) _result.add (sss); 161 } 162 } 163 else if (_strings.add (ss)) _result.add (ss); 164 } 165 } 166 167 final String [] result = new String [_result.size ()]; 168 _result.toArray (result); 169 170 return result; 171 } 172 } 173 174 180 public static void HTMLEscape (final String s, final StringBuffer append) 181 { 182 if (s == null) throw new IllegalArgumentException ("null input: s"); 183 if (append == null) throw new IllegalArgumentException ("null input: append"); 184 185 final char [] chars; 186 if (USE_GET_CHARS) chars = s.toCharArray (); 187 188 for (int i = 0, iLimit = s.length (); i < iLimit; ++ i) 189 { 190 final char c = USE_GET_CHARS ? chars [i] : s.charAt (i); 191 192 switch (c) 193 { 194 case '<': 195 append.append ("<"); 196 break; 197 198 case '>': 199 append.append (">"); 200 break; 201 202 case '"': 203 append.append ("""); 204 break; 205 206 case '&': 207 append.append ("&"); 208 break; 209 210 default: 211 append.append (c); 212 213 } } 215 } 216 217 221 public static void HTMLEscapeNB (final String s, final StringBuffer append) 222 { 223 if (s == null) throw new IllegalArgumentException ("null input: s"); 224 if (append == null) throw new IllegalArgumentException ("null input: append"); 225 226 final char [] chars; 227 if (USE_GET_CHARS) chars = s.toCharArray (); 228 229 for (int i = 0, iLimit = s.length (); i < iLimit; ++ i) 230 { 231 final char c = USE_GET_CHARS ? chars [i] : s.charAt (i); 232 233 switch (c) 234 { 235 case ' ': 236 append.append ('\u00A0'); break; 238 239 case '\t': 240 append.append ("\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0"); break; 242 243 247 case '<': 248 append.append ("<"); 249 break; 250 251 case '>': 252 append.append (">"); 253 break; 254 255 case '"': 256 append.append ("""); 257 break; 258 259 case '&': 260 append.append ("&"); 261 break; 262 263 default: 264 append.append (c); 265 266 } } 268 } 269 270 public static String HTMLEscape (final String s) 271 { 272 final StringBuffer buf = new StringBuffer (); 273 HTMLEscape (s, buf); 274 275 return buf.toString (); 276 } 277 278 public static String HTMLEscapeSP (final String s) 279 { 280 final StringBuffer buf = new StringBuffer (); 281 HTMLEscapeNB (s, buf); 282 283 return buf.toString (); 284 } 285 286 288 290 292 293 private Strings () {} 295 296 private static final boolean USE_GET_CHARS = true; 297 298 } | Popular Tags |