簡體   English   中英

如何在 Java 中的 '~|~' 分隔符上拆分字符串?

[英]How to split string on '~|~' separator in Java?

我輸入了 String '~|~' 作為分隔符。

例如:String s = "1~|~Vijay~|~25~|~Pune"; 當我在 Java 中用 '~\\|~' 拆分它時,它工作正常。

String sa[] = s.split("~\\|~", -1);
for(String str : sa) {
    System.out.println(str);
}

我得到以下 output。

1
Vijay
25
Pune

當我通過傳遞命令行參數('~\\|~')運行同一個程序時。 它沒有正確解析字符串並在 output 下面給出它。

1
|
Vijay
|
25
|
Pune

還有其他人面臨同樣的問題嗎? 請對此問題發表評論。

從命令行運行時,您只需要一個反斜杠。 在 Java 中制作正則表達式時需要兩個的原因是,反斜杠用於轉義字符串文字中的下一個字符或啟動轉義序列,因此需要一個反斜杠來轉義下一個反斜杠,以便對其進行字面解釋。

~\|~

請做一個System.out.println("[" + args[i] + "]"); 查看 java 從命令行接收什么,因為\字符對於 shell 和 aso 是特殊的| ~字符(最后一個擴展到您的主目錄,這可能是一個問題)

你需要通過:

java foo_bar '~\|~'

(Java 這次仍然需要一個\來轉義豎線,因為您不是為 java 編譯器編寫字符串文字,而是表示上述字符串文字的內部表示的簡單字符串, \字符不需要轉義,因為它在單引號內,所以它直接傳遞給 java 程序)任何引用(單引號或雙引號)都足以避免~擴展。

如果你通過

java foo_bar '~\\|~'

shell 不會假定\作為 escaping 字符,並將傳遞與此String文字等效的內容:

String sa[] = s.split("~\\\\|~", -1); /* to escapes mean a literal escape */

(看到現在豎條沒有它的特殊意義)

...這是完全不同的(這次你的意思是:拆分一個~\序列,這是一個~后跟一個反斜杠,或者只是一個~字符,因為沒有~后跟一個反斜杠,使用了第二個選項。你應該得到:

1
|
Vijay
|
25
|
Pune

您發布的 output 是哪個。

你不必逃避:

public static void main(String[] args) {
    Pattern p = Pattern.compile(args[0], Pattern.LITERAL);
    final String[] result = p.split("1~|~Vijay~|~25~|~Pune");
    Arrays.stream(result).forEach(System.out::println);
}

跑步:

javac Main.java
java Main "~|~"

Output:

1
Vijay
25
Pune

其中args[0]等於~|~ (沒有轉義)。 訣竅是模式標志Pattern.LITERAL ,它處理每個字符,包括| ,作為普通字符,忽略它們的元含義。

暫無
暫無

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

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