2

Javaでファイルを編集しようとしています。

ファイル内のすべての引用符 " を \" でエスケープしたい

私はこのように試しました(コピーできるコードをstackoverflowの他のソリューションに関して):

public void replaceInFile(File file) throws IOException {

File tempFile = new File("twittergeoUpdate.csv");
FileWriter fw = new FileWriter(tempFile);

Reader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);

while (br.ready()) {
fw.write(br.readLine().replaceAll("\"", "\\\"") + "\n");
}

fw.close();
br.close();
fr.close();
}

私は速すぎた...それは私にはうまくいきません。見積もりは私のファイルにそのまま残ります。何か案は ?

4

4 に答える 4

3

\\\"バックスラッシュもエスケープ"する必要があるため、5 つのバックスラッシュが必要です。\\\\\"

s.replaceAll("\"", "\\\\\"")
于 2013-01-16T16:13:18.713 に答える
2

StringEscapeUtils#escapeJava()Apachecommons-langパッケージから使用する必要があります。

このような:

org.apache.commons.lang.StringEscapeUtils.escapeJava(<yourStringLiteralHere>)

javadoc から:

StringEscapeUtils#escapeJava()JavaString 規則を使用して String 内の文字をエスケープします。

引用符と制御文字 (タブ、バックスラッシュ、cr、ff など) を正しく処理します。

したがって、タブは文字 '\' と 't' になります。

Java文字列 とJavaScript文字列の唯一の違いはJavaScript、 では一重引用符をエスケープする必要があることです。

  • 入力文字列: 彼は「ストップ!」とは言いませんでした。
  • 出力文字列: 彼は「ストップ!」とは言いませんでした
于 2013-01-16T16:13:15.503 に答える
1

私はコーディングしました:

public void replaceInFile(File file) throws IOException {

    File tempFile = new File("twittergeoUpdate.csv");
    FileWriter fw = new FileWriter(tempFile);

    Reader fr = new FileReader(file);
    BufferedReader br = new BufferedReader(fr);

    while (br.ready()) {

        fw.write(br.readLine().replaceAll("\"", "\\\\\"") + "\n");
    }

    fw.close();
    br.close();
    fr.close();
}//replaceInFile

正しい置換文字列は \\\" (バックスラッシュ 3 つではなく 5 つ) です。

于 2013-01-16T16:22:59.317 に答える
1

基本的な問題は、読み取り元のファイルに書き込むことができず、変更されることを期待できないことです。あなたの場合、FileWriter が最初に行うことは、ファイルを切り捨てることです。リーダーがまだ何かを読み取ることができても、それが破損している例を見てきました。

一時ファイルに書き込み、両方のファイルを閉じ、終了したら元のファイルを一時ファイルに置き換えます (削除と名前の変更を使用)。

于 2013-01-16T16:24:29.260 に答える