8

我有一个文本文件,其中每一行都以大括号开头和结尾:

{aaa,":"bbb,ID":"ccc,}  
{zzz,":"sss,ID":"fff,}  
{ggg,":"hhh,ID":"kkk,} ...  

字符之间没有空格。我正在尝试删除花括号并用空格替换它们,如下所示:

String s = "{aaa,":"bbb,ID":"ccc,}";
String n = s.replaceAll("{", " ");  

我尝试使用以下方法转义大括号:

String n = s.replaceAll("/{", " "); 
String n = s.replaceAll("'{'", " "); 

这些都不起作用,因为它会出现错误。有谁知道解决方案?

4

3 回答 3

23

你不能像这样定义一个字符串:

String s = "{aaa,":"bbb,ID":"ccc,}";

错误在这里,您必须转义字符串内的双引号,如下所示:

String s = "{aaa,\":\"bbb,ID\":\"ccc,}";

现在如果你打电话不会有错误

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

如果您有一个 IDE(即 eclipse 之类的程序),您会注意到字符串的颜色不同于标准颜色黑色(例如方法的颜色或分号 [;])。如果字符串都是相同的颜色(通常是棕色,有时是蓝色),那么你应该没问题,如果你注意到里面有一些黑色,你做错了什么。通常,在双引号 ["] 之后唯一的内容是加号 [+] 后跟必须添加到字符串中的内容。例如:

String firstPiece = "This is a ";
// this is ok:
String all = s + "String";
//if you call:
System.out.println(all);
//the output will be: This is a String

// this is not ok:
String allWrong = s "String";
//Even if you are putting one after the other the two strings, this is forbidden and is a Syntax error.
于 2013-09-13T22:26:51.920 回答
18

String.replaceAll() 采用正则表达式,而正则表达式需要转义'{'字符。所以,替换:

s.replaceAll("{", " ");

和:

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

注意双重转义 - 一个用于 Java 字符串,一个用于正则表达式。

但是,您在这里并不需要正则表达式,因为您只是匹配一个字符。因此,您可以改用该replace方法:

s.replace("{", " "); // Replace string occurrences
s.replace('{', ' '); // Replace character occurrences

或者,使用正则表达式版本一举替换两个大括号:

s.replaceAll("[{}]", " ");

这里不需要转义,因为大括号位于字符类 ( []) 中。

于 2013-09-13T22:38:02.737 回答
3

只需添加到上面的答案:

如果有人像下面这样尝试,这将不起作用:

 if(values.contains("\\{")){
        values = values.replaceAll("\\{", "");
    }
    if(values.contains("\\}")){
        values = values.replaceAll("\\}", "");
    }

如果您使用的是 contains(),请使用以下代码:

if(values.contains("{")){
        values = values.replaceAll("\\{", "");
    }
    if(values.contains("}")){
        values = values.replaceAll("\\}", "");
    }
于 2018-01-05T14:34:28.367 回答