簡體   English   中英

在字符串java中以字符*分割

[英]Split with character * in string java

我有一個字符串作為String placeStr="place1*place2*place3"我想得到的數組包含place1,place2,place3如下:

String[] places=placeStr.split("*");
System.out.println(places[0]);

但它顯示錯誤E / AndroidRuntime(32118):引起:java.util.regex.PatternSyntaxException:索引1附近的regexp模式中的語法錯誤:*

我認為原因是字符“*”。 如果我改變* - ,它顯示確定。 我該怎么辦?

使用Regexp時, \\*表示最后定義的表達式的0 or more實例。 所以舉個例子。

s*表示匹配任何有0或更多“s”的東西。 這將匹配"ss""sssss"""

當我們想要實際搜索* ,而不是將它用作運算符時,我們需要使用\\字符來escape它。 但是,單數\\用於特殊字符(例如\\s\\t ),因此我們還需要使用另一個\\來轉義字符。

這導致:

\ (ignore the next slash)
\ (ignore the star)
* (would be 0 or many, but its been ignored so means the literal.) 

或者換句話說

\\*

在Java中,我們可以像這樣使用它:

String[] places=placeStr.split("\\*");
System.out.println(places[0]);

使用backslashes \\\\嘗試這個:

String[] places=placeStr.split("\\*");
System.out.println(places[0]);

使用反斜杠來改變java中特定字符的含義

String[] places=placeStr.split("\\\\*"); 它會改變*的含義

你需要用反斜杠來避開星號(然后用另一個反斜杠轉義)

String[] places=placeStr.split("\\*");

這應該可以讓您獲得所需的結果

PS這只會打印第一個元素

System.out.println(places[0]);

將它放入for循環將允許您打印它們

int count 0;
for(string place : places) {
    System.out.println(places[count]);
    count++
}

我認為打印代碼可以工作,雖然我還沒有測試過

我至少看到糾正這個問題的答案,但對他們的答案是正確的概念有好處。

正如所指出的,*具有特殊含義,即它匹配所有字符。 因此,在您的情況下,您需要轉義它以使reg ex引擎與其完全匹配,因此您需要在正則表達式中使用*。

但是,如果您嘗試這樣做:

String[] places=placeStr.split("\*");

你會得到一個編譯錯誤。 這是因為\\字符在字符串中有特殊含義。 所以你需要逃避它。

這是你到達的方式:

String[] places=placeStr.split("\\*");

暫無
暫無

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

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