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()使用Java字符串规则转义字符串中的字符。

正确处理引号和控制字符(制表符、反斜杠、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

正确的替换字符串是 \\\"(5 个反斜杠,而不是 3 个)

于 2013-01-16T16:22:59.317 回答
1

基本问题是您不能写入正在读取的文件并且不希望它改变。在您的情况下, FileWriter 做的第一件事是截断文件。我已经看到读者仍然设法阅读某些内容但已损坏的示例。

您必须写入一个临时文件,关闭这两个文件,并在完成后用临时文件替换(使用删除和重命名)您的原始文件。

于 2013-01-16T16:24:29.260 回答