3

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

"some text
some text"

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

还有其他方法吗?

4

3 回答 3

8

你不需要重新发明轮子。您可以org.apache.commons.lang3.StringEscapeUtils用于非转义 Java 字符串。取消转义在字符串中找到的任何 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
于 2012-04-27T21:23:36.473 回答
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)的情况。

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

于 2012-04-27T13:51:49.377 回答
0

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

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

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

于 2012-04-27T12:34:31.047 回答