将转义的转义序列替换为其未转义的值

时间:2012-04-27 12:26:52

标签: java regex

作为输入,我得到字符串"some text\\nsome text" - >如"some text\nsome text"所示。 如何删除一个反斜杠并获取 "some text\nsome text" - >显示为

"some text
some text"

那也适用于"\t"等其他特殊字符? 使用正则表达式,它可以只做     textLine.replace("\\n", "\n") and so on.

还有其他办法吗?

3 个答案:

答案 0 :(得分:8)

你不需要重新发明轮子。您可以将org.apache.commons.lang3.StringEscapeUtils用于unescape Java字符串。 Unescapes在String中找到的任何Java文字。例如,它会将“\”和“n”的序列转换为换行符,除非“\”前面有另一个“\”。在这种情况下,你需要再次使用unescape。

<强>代码

import static org.apache.commons.lang3.StringEscapeUtils.unescapeJava;

public class Unescape {
    public static void main(String[] args) {
        System.out.println("some text\\nsome text");
        System.out.println(unescapeJava("some text\\nsome text"));
    }
}

<强>输出

some text\nsome text
some text
some text

答案 1 :(得分:0)

所以它不那么明显,你想从两个字符创建一个字符。

我制作了这个方法:

    String res="";
    boolean backslash=false;
    for(char c : "some text\\nsome text".toCharArray()){
        if(c!='\\'){
            if(backslash){
                switch(c){
                    case 'n' :
                        res+='\n';
                        break;
                    case 't' :
                        res+='\t';
                        break;

                }
                backslash=false;
            }else{
                res+=c;
            }
        }
        else{
            backslash=true;
        }
    }

也许它会对你有所帮助,它实际上只适用于我放入开关(EOL和Tab)的情况。

注意:如果想要更好的性能,请用StringBuilder替换String。

答案 2 :(得分:-1)

你在玩多行正则表达式吗? 然后你可以编译一个正则表达式:

Pattern.compile("^([0-9]+).*", Pattern.MULTILINE);

http://www.javamex.com/tutorials/regular_expressions/multiline.shtml