在Java中如何根据*分割字符串?

3
我想在Java中使用split方法按*拆分字符串。以下是代码:
String str = "abc*def";
String temp[] = str.split("*");
System.out.println(temp[0]);

但是这个程序给了我以下错误:
Exception in thread "main" java.util.regex.PatternSyntaxException: 
Dangling meta character '*' near index 0 *

我稍微修改了代码,使用'\\*'作为分隔符,这个方法非常有效。有人能解释一下这种行为吗(或者提供另一种解决方案)?
我不想使用StringTokenizer

你到目前为止做了什么来寻找答案? - Brett Kail
我认为你应该尝试阅读Java中许多API使用的正则表达式概念。 - MozenRath
3个回答

5
split()方法实际上接受一个正则表达式。在正则表达式中,*字符具有特殊含义,不能单独出现。为了告诉正则表达式使用实际的*字符,您需要使用\字符进行转义。
因此,您的代码变成了:
String str = "abc*def";
String temp[] = str.split("\\*");
System.out.println(temp[0]);    // Prints "abc"

请注意\\:在Java中,您需要转义斜杠。
如果您想避免将来出现此问题,请阅读有关正则表达式的信息,这样您就可以了解可以使用哪些类型的表达式以及需要转义哪些字符。

你是说我必须使用 * 作为分隔符吗......但那会导致编译时错误..... - Pankaj Parashar
我想说的是,你需要将分隔符设置为 "\\*" 的原因是,否则正则表达式无效,因为 * 字符是一个特殊的元数据字符。 - dlev

1

String.split() 需要一个正则表达式。在正则表达式中,* 有特殊的含义(0个或多个其前面的字符类),因此必须进行转义。 \* 实现了此目的。由于您使用的是 Java 字符串,\\\ 的转义序列,因此您的正则表达式就变成了正确的 \*


1

Split函数接受一个正则表达式作为分隔符,而不是一个字符串。正则表达式中*是一个保留字符,因此需要用反斜杠进行转义。

在Java中,字符串中的反斜杠也是特殊字符。它们用于换行符(\n)、制表符(\t)和许多其他不常见的字符。

因此,由于您正在编写Java代码并编写正则表达式,所以需要对*字符进行两次转义,即'\*'。


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