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



作为输入,我得到的字符串"some text\nsome text" ->,显示为"some textnsome text" .怎么可能删除一个反斜杠并获取 "some textnsome text" ->显示为

"some text
some text"

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

还有别的办法吗?

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

代码

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 textnsome text
some text
some text

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

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

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

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

我做了这个方法:

    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。

最新更新