Java 第二,一切都不起作用

Java 第二,一切都不起作用,java,replace,comma,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_Erfolgr

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

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();
    }

 }
}
所以我想让这个逗号停留在
},{
之间,但它不起作用,我得到一条错误消息
“线程中的异常”main“java.util.regex.PatternSyntaxException:索引1},{

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行永远不会执行,因为第3行中所有出现的
    \uffff
    都已被替换
  • 第5行也不会执行,因为第2行中已替换了所有出现的

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

使用第二个
\
对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 },{

不知道第2个replaceAll是什么,但第4个不会有太多的内容。之所以这样叫是因为它替换了所有出现的内容;
replace
也会这样做。之所以这样叫是因为它替换了与给定正则表达式匹配的所有字符串。请注意,
replaceAll
t有5个实例这里。我想你不是真的想要两个。你真的应该把语句分解成多个分配给temp的语句——这样调试更容易,效率也不会降低。不工作,我尝试用我自己的方式。replaceAll(“\\},\\\{,“\uffff”),但它仍然删除有解决方案,但无法发布^^