17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 3aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert * Copyright (C) 2002-2015, International Business Machines Corporation and 4aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert * others. All Rights Reserved. 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.util; 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.BufferedReader; 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.IOException; 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.PrintWriter; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class FileUtilities { 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void appendFile(String filename, String encoding, PrintWriter output) throws IOException { 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert appendFile(filename, encoding, output, null); 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void appendFile(String filename, String encoding, PrintWriter output, String[] replacementList) throws IOException { 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BufferedReader br = BagFormatter.openReader("", filename, encoding); 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert FileInputStream fis = new FileInputStream(filename); 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert InputStreamReader isr = (encoding == UTF8_UNIX || encoding == UTF8_WINDOWS) ? new InputStreamReader(fis, "UTF8") : new InputStreamReader(fis); 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BufferedReader br = new BufferedReader(isr, 32*1024); 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 26aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert try { 27aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert appendBufferedReader(br, output, replacementList); 28aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert } finally { 29aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert br.close(); 30aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert } 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void appendBufferedReader(BufferedReader br, 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert PrintWriter output, String[] replacementList) throws IOException { 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (true) { 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String line = br.readLine(); 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (line == null) break; 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (replacementList != null) { 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < replacementList.length; i += 2) { 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert line = replace(line, replacementList[i], replacementList[i+1]); 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert output.println(line); 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert br.close(); 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Replaces all occurances of piece with replacement, and returns new String 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static String replace(String source, String piece, String replacement) { 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (source == null || source.length() < piece.length()) return source; 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int pos = 0; 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (true) { 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pos = source.indexOf(piece, pos); 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (pos < 0) return source; 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert source = source.substring(0,pos) + replacement + source.substring(pos + piece.length()); 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pos += replacement.length(); 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static String replace(String source, String[][] replacements) { 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return replace(source, replacements, replacements.length); 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static String replace(String source, String[][] replacements, int count) { 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < count; ++i) { 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert source = replace(source, replacements[i][0], replacements[i][1]); 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return source; 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static String replace(String source, String[][] replacements, boolean reverse) { 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!reverse) return replace(source, replacements); 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < replacements.length; ++i) { 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert source = replace(source, replacements[i][1], replacements[i][0]); 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return source; 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static String anchorize(String source) { 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String result = source.toLowerCase(Locale.ENGLISH).replaceAll("[^\\p{L}\\p{N}]+", "_"); 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (result.endsWith("_")) result = result.substring(0,result.length()-1); 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (result.startsWith("_")) result = result.substring(1); 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return result; 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 88