[英]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.