【问题标题】:Splitting a String on * in Java?在Java中在*上拆分字符串?
【发布时间】:2011-08-20 05:18:25
【问题描述】:

我想使用split 方法在* 上用Java 拆分String。代码如下:

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

【问题讨论】:

  • 到目前为止,您为找到问题的答案做了什么?
  • 我认为您应该尝试阅读 java 中许多 API 使用的正则表达式概念。

标签: java regex string escaping split


【解决方案1】:

split() 方法实际上接受正则表达式。 * 字符在正则表达式中具有特殊含义,不能单独出现。为了告诉正则表达式使用实际的* 字符,您需要使用\ 字符对其进行转义。

因此,您的代码变为:

String str = "abc*def";
String temp[] = str.split("\\*");
System.out.println(temp[0]);    // Prints "abc"

注意\\:Java 也需要转义斜线。

如果您以后想避免这个问题,请read up on regular expressions,这样您就可以很好地了解您可以使用哪些类型的表达式,以及您需要转义哪些字符。

【讨论】:

  • 你说 dat 我必须使用 * 作为分隔符.....但是 dat 给出了编译时错误.....
  • 我是说你需要设置分隔符"\\*"的原因是因为否则正则表达式无效,因为*字符是一个特殊的元数据字符。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    Split 接受要拆分的正则表达式,而不是字符串。正则表达式有 * 作为保留字符,因此您需要使用反斜杠对其进行转义。

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

    因此,因为您正在编写 java,并且正在编写正则表达式,所以您需要将 * 字符转义两次。因此'\*'。

    【讨论】:

      猜你喜欢
      • 2015-03-30
      • 2012-03-21
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多