我的字符串为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模式中的语法错误:*
我认为原因是字符“*”。如果我改变* - ,它显示确定。 我该怎么办?
答案 0 :(得分:9)
使用Regexp时,\*
表示最后定义的表达式的0 or more
个实例。例如。
s*
表示匹配0
或更多“s”的任何内容。这将匹配"ss"
,"sssss"
或""
。
如果我们想要实际搜索*
,而不是将其用作运算符,我们需要escape
使用\
字符。但是,单数\
用于特殊字符(例如\s
和\t
),因此我们还需要使用另一个{{1}转义 字符}}。
这导致:
\
或换句话说
\ (ignore the next slash)
\ (ignore the star)
* (would be 0 or many, but its been ignored so means the literal.)
在Java中,我们可以像这样使用它:
\\*
答案 1 :(得分:0)
使用backslashes \\
:
String[] places=placeStr.split("\\*");
System.out.println(places[0]);
答案 2 :(得分:0)
使用反斜杠改变java中特定字符的含义
即String[] places=placeStr.split("\\*");
它会改变*
答案 3 :(得分:0)
你需要用反斜杠转义星号(然后用另一个反斜杠转义)
String[] places=placeStr.split("\\*");
这可以让您获得所需的结果
PS这只会打印第一个元素
System.out.println(places[0]);
将它放入for循环将允许您打印所有
int count 0;
for(string place : places) {
System.out.println(places[count]);
count++
}
我认为打印代码可以使用,但我还没有测试过它
答案 4 :(得分:0)
我至少看到纠正这个问题的答案,但对他们的答案是正确的概念有好处。
正如所指出的,*具有特殊含义,即它匹配所有字符。因此,在您的情况下,您需要转义它以使reg ex引擎与其完全匹配,因此您需要在正则表达式中使用*。
但是,如果您尝试这样做:
String[] places=placeStr.split("\*");
您将收到编译错误。这是因为\字符在字符串中有特殊含义。所以你需要逃避它。
这是你到达的地方:
String[] places=placeStr.split("\\*");