import java.io.FileReader; import java.io.FileWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.Reader; import java.io.Writer; import java.io.IOException; import java.util.regex.Pattern; import java.util.regex.Matcher; import java.util.regex.PatternSyntaxException; public class PatternReplacer1 { private static final int MAX_SIZE = 1000; public PatternReplacer1() {} // Stream からの読み込み private String readContents(Reader reader) throws IOException { char[] chars = new char[10000]; StringBuffer buffer = new StringBuffer(); while (true) { int size = reader.read(chars); if (size < 0) { break; } buffer.append(chars, 0, size); } return buffer.toString(); } public void replaceFirst(String regex, String replaceText, Reader reader, PrintWriter writer) throws IOException { String contents = readContents(reader); replaceFirst(regex, replaceText, contents, writer); } private void replaceFirst(String regex, String replaceText, String input, PrintWriter writer){ try { Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(input); String result = matcher.replaceFirst(replaceText); writer.print(result); } catch (PatternSyntaxException ex) { System.err.println(ex.getMessage()); ex.printStackTrace(); return; } } public static void main(String[] args) { if (args.length < 2) { System.out.println("Usage: java PatternReplacer1 pattern replace [inputfile] [outputfile]"); return; } PatternReplacer1 replacer = new PatternReplacer1(); try { Reader reader = null; PrintWriter writer = null; if (args.length == 2) { reader = new InputStreamReader(System.in); writer = new PrintWriter(new OutputStreamWriter(System.out)); } else if (args.length == 3) { reader = new FileReader(args[2]); writer = new PrintWriter(new OutputStreamWriter(System.out)); } else if (args.length > 3) { reader = new FileReader(args[2]); writer = new PrintWriter(new FileWriter(args[3])); } replacer.replaceFirst(args[0], args[1], reader, writer); reader.close(); writer.close(); } catch(IOException ex) { ex.printStackTrace(); } } }