使用 "*" 进行字符串分割的问题

15

假设有一个字符串...

String myString =  "my*big*string*needs*parsing";

我想要的只是把字符串分割成“my”、“big”、“string”等部分。 所以我尝试了下面的方法:

myString.split("*");

返回java.util.regex.PatternSyntaxException:在索引0附近存在悬挂元字符“*”。

*是regex中的特殊字符,因此我尝试进行转义....

myString.split("\\*");

同样的异常。我想应该会有人知道一个快速解决方案。谢谢。


你的右边 \* 是有效的,我正在使用它从一个数组... myArray[x].split("\*"); 但是它会抛出异常,但如果我先将myArray[x]转换为字符串,然后再运行它,它就可以工作了...感谢你们的回答 :) - OHHAI
我是说在上面的评论中需要双斜杠 \. - OHHAI
6个回答

23

split("\\*") 对我起作用。


5

在Mac OSX上的Java 6中,一个转义符\是不够的,因为\被保留用于\b \t \n \f \r \'\"\\。你似乎已经做到了这一点:

public static void main(String[] args) {
    String myString =  "my*big*string*needs*parsing";
    String[] a = myString.split("\\*");
    for (String b : a) {
        System.out.println(b);
    }
}

输出:

我的
大的
字符串
需要
解析



0

你也可以使用 StringTokenizer

 StringTokenizer st = new StringTokenizer("my*big*string*needs*parsing", "\*");
 while (st.hasMoreTokens()) {
     System.out.println(st.nextToken());
 }

0

myString.split("\\*"); 在 Java 5 上运行良好。您使用哪个 JRE 版本?


单斜杠不起作用;* 不是特殊字符。我认为你打错了:) - extraneon

0
这是因为split方法需要一个正则表达式而不是普通字符串。
字符'*'表示匹配前一个字符零次或多次,因此不能单独指定它。
所以应该像下面这样转义:
split("\\*")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接