繁体   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