用java转义引号替换文件中的每个引用

时间:2013-01-16 16:09:56

标签: java file replace escaping edit

我正在尝试用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 个答案:

答案 0 :(得分:3)

\\\"只能转义"(双引号),你必须逃避反斜杠,这需要5个反斜杠。 \\\\\"

s.replaceAll("\"", "\\\\\"")

答案 1 :(得分:2)

您应该使用Apache StringEscapeUtils#escapeJava()包中的commons-lang

像这样:

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

来自javadoc

StringEscapeUtils#escapeJava()使用Java字符串规则转义字符串中的字符。

正确处理引号和控制字符(制表符,反斜杠,cr,ff等)

因此标签变为字符'\'和't'。

Java字符串与JavaScript字符串之间的唯一区别在于JavaScript,必须对单引号进行转义。

示例

  • 输入字符串:他没有说,“停止!”
  • 输出字符串:他没有说,“停止!”

答案 2 :(得分: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)

答案 3 :(得分:1)

基本问题是您无法写入正在阅读的文件而不期望它会更改。在您的情况下,FileWriter做的第一件事就是 truncate 该文件。我见过一些例子,读者仍然设法阅读但它已被破坏。

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