1 19 20 25 26 27 package soot.util; 28 29 import java.text.*; 30 31 32 public class StringTools 33 { 34 35 37 public static java.lang.String getEscapedStringOf(String fromString) 38 { 39 char[] fromStringArray; 40 int cr, lf, ch; 41 StringBuffer whole = new StringBuffer (); 42 StringBuffer mini = new StringBuffer (); 43 44 fromStringArray = fromString.toCharArray(); 45 46 cr = lineSeparator.charAt(0); 47 lf = -1; 48 49 if (lineSeparator.length() == 2) 50 lf = lineSeparator.charAt(1); 51 52 for (int i = 0; i < fromStringArray.length; i++) 53 { 54 ch = (int) fromStringArray[i]; 55 if (((ch >= 32 && ch <= 126) || ch == cr || ch == lf) && ch != '\\') 56 { 57 whole.append((char) ch); 58 59 continue; 60 } 61 62 mini.setLength(0); 63 mini.append(Integer.toHexString(ch)); 64 65 while (mini.length() < 4) 66 mini.insert(0, "0"); 67 68 mini.insert(0, "\\u"); 69 whole.append(mini.toString()); 70 } 71 72 return whole.toString(); 73 } 74 75 76 public final static String lineSeparator = System.getProperty("line.separator");; 77 78 81 public static java.lang.String getQuotedStringOf(String fromString) 82 { 83 StringBuffer toStringBuffer; 84 char[] fromStringArray; 85 86 toStringBuffer = new java.lang.StringBuffer (); 87 fromStringArray = fromString.toCharArray(); 88 89 toStringBuffer.append("\""); 90 91 for (int i = 0; i < fromStringArray.length; i++) 92 { 93 char ch = fromStringArray[i]; 94 { 95 if (ch == '\\') 96 { toStringBuffer.append("\\\\"); continue;} 97 if (ch == '\'') 98 { toStringBuffer.append("\\\'"); continue; } 99 if (ch == '\"') 100 { toStringBuffer.append("\\\""); continue; } 101 if (ch == '\n') 102 { toStringBuffer.append("\\n"); continue; } 103 if (ch == '\t') 104 { toStringBuffer.append("\\t"); continue; } 105 else if((int) ch >= 32 && (int) ch <= 126) 106 {toStringBuffer.append(ch); continue;} 107 } 108 109 toStringBuffer.append(getUnicodeStringFromChar(ch)); 110 } 111 112 toStringBuffer.append("\""); 113 return toStringBuffer.toString(); 114 } 115 116 118 public static String getUnicodeStringFromChar(char ch) 119 { 120 String s = Integer.toHexString((int) ch); 121 String padding = null; 122 123 switch(s.length()) { 124 case 1: 125 padding = "000"; 126 break; 127 case 2: 128 padding = "00"; 129 break; 130 case 3: 131 padding = "0"; 132 break; 133 case 4: 134 padding = ""; 135 break; 136 } 137 138 return "\\u" + padding + s; 139 } 140 141 143 public static String getUnEscapedStringOf(String str) 144 { 145 StringBuffer buf = new StringBuffer (); 146 CharacterIterator iter = new StringCharacterIterator(str); 147 148 for(char ch = iter.first(); ch != CharacterIterator.DONE; ch = iter.next()) 149 { 150 if (ch != '\\') 151 buf.append(ch); 152 else 153 { ch = iter.next(); 155 char format; 156 157 if(ch == '\\') 158 buf.append(ch); 159 else if ( (format = getCFormatChar(ch)) != '\0') 160 buf.append(format); 161 else if(ch == 'u') 162 { StringBuffer mini = new StringBuffer (4); 164 for(int i = 0; i <4; i++) 165 mini.append(iter.next()); 166 167 ch = (char) Integer.parseInt(mini.toString(), 16); 168 buf.append(ch); 169 } else { 170 throw new RuntimeException ("Unexpected char: " + ch); 171 } 172 } 173 } 174 return buf.toString(); 175 } 176 177 178 public static char getCFormatChar(char c) 179 { 180 char res; 181 182 switch(c) { 183 case 'n': 184 res = '\n'; 185 break; 186 case 't': 187 res = '\t'; 188 break; 189 case 'r': 190 res = '\r'; 191 break; 192 case 'b': 193 res = '\b'; 194 break; 195 case '\"': 196 res = '\"'; 197 break; 198 case '\'': 199 res = '\''; 200 break; 201 202 default: 203 res = '\0'; 204 break; 205 } 206 return res; 207 } 208 209 229 public static String replaceAll(String orig, String toBeReplaced, 230 String replacement) { 231 int quarryLength = toBeReplaced.length(); 232 if (quarryLength <= 0) { 233 return orig; 234 } 235 236 int index = orig.indexOf(toBeReplaced); 237 if (index < 0) { 238 return orig; 239 } else { 240 int from = 0; 241 StringBuffer sb; 242 if (quarryLength < replacement.length()) { 243 sb = new StringBuffer (orig.length()); 244 } else { 245 sb = new StringBuffer (orig.length() * 2); 246 } 247 248 do { 249 sb.append(orig.substring(from, index)); 250 sb.append(replacement); 251 from = index + quarryLength; 252 index = orig.indexOf(toBeReplaced, from); 253 } while (index >= 0); 254 255 sb.append(orig.substring(from)); 256 return sb.toString(); 257 } 258 } 259 } 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 | Popular Tags |