正则表达式转换为将字符串转换为制表符分隔字段

时间:2014-09-23 13:31:50

标签: java regex

我想将字符串转换为制表符分隔格式。在我看来,选项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

2 个答案:

答案 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("\"", "\"\"") + "\"";

并且......没有头脑疼痛计算反斜杠。