【问题标题】:Replace every quotation in a file by an escaping quotation with java用 java 转义引号替换文件中的每个引号
【发布时间】:2012-12-31 00:37:09
【问题描述】:

我正在尝试使用 java.xml 编辑文件。

我想用 \" 转义我文件中的每个引用 "

我是这样尝试的(关于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();
}

我太快了……它对我不起作用。报价单在我的文件中保持不变。有什么想法吗?

【问题讨论】:

  • 你不能写入一个文件,也不能指望它在你读取它时改变。看我的回答。

标签: java file replace escaping edit


【解决方案1】:

\\\" 只转义"(双引号),您还必须转义反斜杠,因此您需要 5 个反斜杠。 \\\\\"

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

【讨论】:

    【解决方案2】:

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

    像这样:

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

    来自 javadoc

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

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

    所以制表符变成了字符“\”和“t”。

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

    示例

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

    【讨论】:

      【解决方案3】:

      我编码:

      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 个)

      【讨论】:

        【解决方案4】:

        基本问题是您无法写入正在读取的文件并且不希望它改变。在您的情况下, FileWriter 所做的第一件事是 truncate 文件。我见过一些例子,读者仍然可以阅读某些内容,但内容已损坏。

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

        【讨论】:

          猜你喜欢
          • 2011-05-11
          • 2017-08-05
          • 1970-01-01
          • 2011-06-09
          • 1970-01-01
          • 2013-09-24
          • 1970-01-01
          • 2015-07-31
          • 1970-01-01
          相关资源
          最近更新 更多