我有一个文本文件,其中每一行以大括号开头和结尾:
{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("'{'", " ");
这一切都不起作用,因为它会出现错误。有谁知道解决方案?
答案 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("\\}", "");
}