我的代码不想工作。我想替换所有逗号,但替换这些逗号“,”和此},{
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 },{
“
答案 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 = ","}{
注意:
","
替换为\uffff
,然后将其全部替换为\uffff
的所有出现都已在第3行中被替换,
的所有出现都已在第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 },{