- PR -

JDKの正規表現(java.util.regex)での改行の削除方法について

1
投稿者投稿内容
未記入
会議室デビュー日: 2007/01/09
投稿数: 1
投稿日時: 2007-01-09 20:02
java.util.regex で html ファイルから改行を削除しようと、
\\\n や \u000A で改行文字を指定するのですが、なぜか
Javaプログラムで改行が認識されません。

Javaで html ファイルの改行の削除方法を
ご存知の方、お教え下さい。

どうしても、分からなくて、とても困ってます。

以下に、実行しているプログラムの関連部分を載せます。


===================================================================
public class RegExp0116 {
/** 置換元文字列 */
private static String[] src = new String[33];

/** 置換文字列 */
private static String[] replace = new String[33];
<中略>
public static void main(String[] args) throws IOException {
File file = new File("C:\\HTMLfiles");

src = "\\\n";
replace= "";

<中略>
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,Pattern.MULTILINE);
Matcher matcher = pattern.matcher(lines[j]);
lines[j] = matcher.replaceAll(replace);
}
}
=======================================================================
だっちょ
大ベテラン
会議室デビュー日: 2006/12/05
投稿数: 115
投稿日時: 2007-01-09 20:52
単にBufferedReaderでreadLineした文字列をつなげただけではだめなんですか?

ソースでgetLinesで取得する文字列がどのようなものかわかりませんが、
Windowsだとたぶん\rが入っていると思いますので、
\nだけの置換だとnotepadで見たとき黒い四角が残っていると思います。
src="¥¥r{1}¥¥n"とでもすればいいのかな?


[ メッセージ編集済み 編集者: だっちょ 編集日時 2007-01-11 08:49 ]
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-01-10 10:47
提示のサンプルソースはいろいろ欠けているのでそのまま動作確認できないのですが、
ソースを見ていて気になる点がありました。
「正規表現の記述方法が分からない」のか、
「プログラムが動かないのは正規表現の表記に誤りがあると思いこんでいる」のか
どちらなのでしょうか?

正規表現が誤っているかどうかを確認したければ、ミニマムなプログラムを書いて
確かめればわかることです。
コード:
public class RegexTest {
    public static void main(String[] args) {
        String pre = "a¥nb¥nc¥nd";
        System.out.println(pre.replaceAll("¥¥n", ""));
    }
}


注) @IT掲示板のバグの関係上、円マークは全角にしています

getLines(file.getPath());の箇所で取得したString[]の中身を確認しましたか?
getLines()はあなたが書いたメソッドだと思いますが、
BufferedReader.readLine()あたりで行ごとに読み込んでいるのではないでしょうか。
この時点で末尾に改行コードはついていますか?

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/io/BufferedReader.html#readLine()
引用:

戻り値:
行の内容を含む文字列、ただし行の終端文字は含めない。ストリームの終わりに達している場合は null



あなた自身が本当にわからないことは何でしょうか?
自分の無知の知を再考してみてください。

# ちなみにPattern.compileはforループの外に置くとパフォーマンスがよいですよ
1

スキルアップ/キャリアアップ(JOB@IT)