第二次更换不工作

时间:2015-02-02 21:10:10

标签: java replace comma

我的代码不想工作。我想替换所有逗号,但替换这些逗号“,”和此},{

import java.io.*;

public class converter {

public static void main(String[] args) throws IOException {
   try {

        BufferedReader br = new BufferedReader(
                new FileReader("C:/Users/Sei_Erfolgreich/Desktop/convert.txt"));
        String zeile;

        try {
            File newTextFile = new File("C:/Users/Sei_Erfolgreich/Desktop/convert2.txt");
            FileWriter fw = new FileWriter(newTextFile);
            while ((zeile = br.readLine()) != null) {
                zeile = zeile.replaceAll("\",\"", "\uffff").replaceAll(",", "").replaceAll("\uffff", "\",\"")
                .replaceAll("\uffff", "},{")
                .replaceAll("},{", "\uffff");
                System.out.println(zeile);
                fw.write(zeile);
            }

            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    }

 }
}

所以我想让这个逗号停留在},{之间,但它不起作用,我收到错误消息"Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 1 },{

2 个答案:

答案 0 :(得分:2)

replaceAll()方法采用正则表达式而不是常规字符串。 大括号在Java正则表达式中具有特殊含义

你必须逃避花括号,否则它们将被理解为正则表达式的一部分。

但是以下表达式无法正常工作:

zeile.replaceAll("\",\"",  "\uffff")
     .replaceAll(",",      "")
     .replaceAll("\uffff", "\",\"")
     .replaceAll("\uffff", "},{")
     .replaceAll("},{",    "\uffff");

因为您正在使用replaceAll()的多个调用,所以您正在生成多个中间结果,结果取决于之前的中间结果。

e.g。如果输入字符串的内容为",",},{,则您的程序将:

1. zeile.replaceAll("\",\"",  "\uffff")    // input = \uffff,},{
2.     .replaceAll(",",       "")          // input = \uffff}{
3.     .replaceAll("\uffff",  "\",\"")     // input = ","}{
4.     .replaceAll("\uffff",  "},{")       // input = ","}{
5.     .replaceAll("\\},\\{", "\uffff");   // input = ","}{

注意:

  • 请注意,第1行和第3行正在进行相反的更改,首先您将所有","替换为\uffff,然后将其全部替换为
  • 第4行永远不会执行,因为\uffff的所有出现都已在第3行中被替换
  • 第5行永远不会执行,因为,的所有出现都已在第2行中被替换

答案 1 :(得分:0)

字符{}在正则表达式(量词)中具有特殊含义。使用\转义这些字符。

使用第二个\将其转义为Java。

结果:.replaceAll("\\},\\{", "\\uffff");

<强>更新

更改替换顺序如下:

       zeile = zeile.replaceAll("\",\"", "\uffff")    //backup any "," 
                    .replaceAll("\\},\\{", "\ueeee")  //backup any },{
                    .replaceAll(",", "")              //replace all commas that are still in the string
                    .replaceAll("\uffff", "\",\"")    //restore ","
                    .replaceAll("\ueeee", "},{");     //restore },{