【问题标题】:Do You Need To Escape * Character in Java?你需要在 Java 中转义 * 字符吗?
【发布时间】:2013-01-07 22:50:23
【问题描述】:

所以我在我的一个程序中编写了一小段代码,该程序使用 split 方法来解析和排序字符串中包含的各个组件。以下是代码示例:

String[] sArray;

String delimiter = "*";

String test = "TEXT*TEXT*TEXT*";
String a = "";
String b = "";
String c = "";

sArray= test.split(delimiter);

a = sArray[0];
b = sArray[1];
c = sArray[2];

System.out.println("A is: " + a + "\nB is: " + b + "\nC is: " + c);

但是,当我运行这个程序时,它会返回一个错误,指出:

Dangling meta character '*' near index 0

所以我用谷歌搜索了这个错误,发现它可能与* 在正则表达式中如何被视为通配符的问题有关。所以我尝试了:

String delimiter = "\*"

但这只是返回另一个错误说明:

illegal escape character

之前有没有人遇到过这个问题,或者知道你是如何(如果你是)应该在 java 中逃避*?

【问题讨论】:

标签: java string split escaping wildcard


【解决方案1】:

您还必须转义反斜杠:

String delimiter = "\\*";

因为字符串文字 "\\" 只是一个反斜杠,所以字符串文字 "\\*" 表示转义的星号。

【讨论】:

    【解决方案2】:

    理解解决方案的方法是意识到这里有两种“语言”在起作用。您拥有正则表达式语言(Java 风格),其中* 是一个元字符,需要用\ 转义以表示文字*。这给了你

    ''\*''    // not Java yet ...
    

    但是您试图用 Java 字符串文字的“语言”来表示该字符串,其中 \ 是转义字符。所以这要求任何文字 \ (无论我们试图表示什么)都必须被转义。这给了你

    "\\*"     // now Java ...
    

    如果您始终如一地应用这种方法/思考 - “首先进行正则表达式转义,然后进行字符串文字转义” - 您不会感到困惑。

    【讨论】:

      【解决方案3】:

      你必须在“*”之前附加“\”,就好像你想在java中表示“\”一样,你必须在它之前再使用一个“\”。

      所以,“\”代表:----->“\” 因此,如果您想使用“”作为分隔符,请使用“\”

      更正的代码:

      String delimiter = "\\*";
      String test = "TEXT*TEXT*TEXT*";
      String a = "";
      String b = "";
      String c = "";
      sArray= test.split(delimiter);
      a = sArray[0];
      b = sArray[1];
      c = sArray[2];
      System.out.println("A is: " + a + "\nB is: " + b + "\nC is: " + c);
      

      输出:

      A 是:文本

      B 是:文本

      C 是:文本

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-03
        • 2013-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多