ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュのjava.util.regex (正規表現API)での改行文字の操作

  • mixiチェック
  • このエントリーをはてなブックマークに追加
以下のプログラムで、改行の検索と検索結果の改行文字(\\n)を別の文字(\\n\\n)に置換したいのですが、WinXP下で、出力結果には \n\n が入力されます。

なぜ、\\n が単なる文字になるのか、分かりません。

どなたか、教えてくれませんか?

=====以下、コード=====
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* 引数で指定したディレクトリ配下のファイルを指定した文字列で置換える。
* java tool.Replace [ディレクトリパス] [置換元文字列] [置換文字列]
* 例 java tool.Replace c:\hoge する します
* @author yamarou
*/
public class FileReplaceRegExpFinal2 {
/** 置換元文字列 */
private static String src;

/** 置換文字列 */
private static String replace;

public static void main(String[] args) throws IOException {
File file = new File(args[0]);
src = args[1];
replace = args[2];
searchDir(file);
}

/**
* dir 配下のファイルの中に含まれるsrcをreplaceに置換する。
* @param dir 配下に置換するファイルの存在するディレクトリ
* @throws IOException
*/
private static void searchDir(File dir) throws IOException {
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
File file = files[i];
if (file.isDirectory()) {
searchDir(file);
} else {
String[] lines = getLines(file.getPath());
for (int j = 0; j < lines.length; j++) {
Pattern pattern = Pattern.compile(src);
Matcher matcher = pattern.matcher(lines[j]);
lines[j] = matcher.replaceAll(replace);
}
PrintWriter out =
new PrintWriter(new BufferedWriter(new FileWriter(file.getPath())));
for (int j = 0; j < lines.length; j++) {
out.println(lines[j]);
}
out.close();
}
}
}

/**
* 引数filePathのファイルをテキストストリームで全て読み込んでString配列に
* 格納して返します。
* @param filePath テキストファイルのパス
* @return 読み込んだファイルの中身
*/
private static String[] getLines(String filePath) throws IOException {
BufferedReader in = new BufferedReader(new FileReader(filePath));
ArrayList list = new ArrayList(5000);
String line = null;
while ((line = in.readLine()) != null) {
list.add(line);
}
String[] lines = new String[list.size()];
list.toArray(lines);
return lines;
}
}

コメント(4)

> シークさん

自分で \\\n としたら、改行になりました。
(\を3つ付けました。)

ありがとうございました。
ついでですけど、前方参照で(abc)(def)を\\1\\2で参照したら、『』に似た、記号が表示されました。

Java の正規表現って、なんか謎でした。自分のマシン環境のせいかも。

皆様は、すんなりいかれることをお祈りします。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング