簡體   English   中英

Java轉義轉義序列

[英]Java escaping escape sequence

我想在字符串中轉義轉義序列。

示例:如果我有一個內容為“\\ n \\ u0073”的字符串,我需要以這樣的方式對它們進行轉義:如果我將它打印到命令行,我會看到

this:
\n\u0073
instead of:

s

我也將轉義雙引號(“)和反斜杠(\\),我想出一個表達式來逃避已經:

Pattern p = Pattern.compile("([\"\\\\])");
String str = p.matcher("\"\n\u0073\\"").replaceAll("\\\\$1");

這讓我產生了:

\"
s\\

但是,它不會處理轉義序列。 我想要的是:

\"\n\u0073\\

我需要做哪些修改才能逃脫轉義序列?

您可以使用StringEscapeUtils 它上面有方法escapeJava() 不幸的是,imo,沒有辦法逃脫unicode文字,如\\ u0073所以為你的例子輸入“\\”\\ n \\ u0073 \\“”StringEscapeUtils.escapeJava("\\"\\n\s\\"")將返回\\"\\ns\\"

像這樣的東西?

public class Example {

    public static void main(String[] argv) {
        System.out.println("= First try =");
        System.out.println("\n\u0073");
        System.out.println("= Second try =");
        System.out.println("\n\\u0073");
    }

}

哪個會輸出這個:

= First try =

s
= Second try =

\u0073

這樣的事怎么樣? 它100%工作......唯一的弱點是我對每個角色都有一個明確的例子。 我不知道是否有周圍的一種方式,但也許你可以得到解決,通過使一個案例字符的整個范圍 我不認為RegEx可以匹配像\s這樣的字符定義,但我不確定。

public static void main(String[] args) {
    String unescaped = "\n\u0073";
    System.out.println("Version 1:\n" + unescaped);
    System.out.println("\nVersion 2:");
    printEscaped(unescaped);
}

public static void printEscaped(String unescaped) {
    for (char c : unescaped.toCharArray()) {
        switch (c) {
            case ('\n'):
                System.out.print("\\n");
                break;
            case ('\u0073'):
                System.out.print("\\u0073");
                break;
            default:
                System.out.print(c);
        }
    }
}

輸出:

Version 1:

s

Version 2:
\n\u0073

更廣泛使用的另一個潛在問題是即使它們沒有被轉義序列定義,它也可以處理字符。 例如, printEscaped("s")將打印與printEscaped("\s") :它們都將打印\s 因此,您必須小心在字符串上調用方法,您確定要在“轉義符號”中打印每個字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM