在Java中删除大括号

时间:2013-09-13 22:24:54

标签: java

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

{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("'{'", " "); 

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

3 个答案:

答案 0 :(得分:20)

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

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.

答案 1 :(得分:17)

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

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

使用:

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

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

但是,你真的不需要正则表达式,因为你只是匹配一个字符。因此,您可以使用replace方法:

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

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

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

此处不需要转义,因为大括号位于字符类([])内。

答案 2 :(得分:0)

只是添加上面的答案:

如果有人在尝试如下,这将无效:

io.Writer

如果您使用的是contains():

,请使用以下代码
 if(values.contains("\\{")){
        values = values.replaceAll("\\{", "");
    }
    if(values.contains("\\}")){
        values = values.replaceAll("\\}", "");
    }