我想将字符串转换为制表符分隔格式。在我看来,选项1应该这样做。但看起来选项2实际上产生了期望的结果。有人可以解释原因吗?
public class test {
public static void main(String[] args) {
String temp2 = "My name\" is something";
System.out.println(temp2);
System.out.println( "\"" + temp2.replaceAll("\"", "\\\"") +"\""); //option 1
System.out.println( "\"" + temp2.replaceAll("\"", "\\\\\"") +"\""); //option 2
if(temp2.contains("\"")) {
System.out.println("Identified");
}
}
}
,输出为:
My name" is something
"My name" is something"
"My name\" is something"
Identified
答案 0 :(得分:1)
使用String#replace(CharSequence, CharSequence)
代替String#replaceAll()
。前者是一个简单的字符串替换,因此如果您没有阅读任何文档或不了解正则表达式,它可以正常工作。后者interprets its arguments differently,因为它是正则表达式查找和替换:
请注意,替换字符串中的反斜杠(
\
)和美元符号($
)可能会导致结果与将其视为文字替换字符串时的结果不同。
你会得到这个输出:
My name" is something
"My name\" is something"
"My name\\" is something"
Identified
答案 1 :(得分:1)
如果您想要Excel兼容的CSV格式,双引号的转义是两个双引号,所以称为自转义。
String twoColumns = "\"a nice text\"\t\"with a \"\"quote\"\".";
String s = "Some \"quoted\" text.";
String s2 = "\"" + s.replace("\"", "\"\"") + "\"";
并且......没有头脑疼痛计算反斜杠。