我在java中的lookbehind有问题。
以下方法

    public static void main (String[] args) throws java.lang.Exception
{
    String num = "1E-12x10";
    String[] numArr = num.split("(?<!E)\\-");
    System.out.println(numArr[0]);

}


产生预期的输出1E-12x10-它不会在'-'上分割。

以下方法

    public static void main (String[] args) throws java.lang.Exception
{
    String num = "1E-12x10";
    String[] numArr = num.split("[x\\-]");
    System.out.println(numArr[0] + " " + numArr[1] + " " + numArr[2]);

}


还产生预期的输出1E 12 10,同时在“ x”和“-”上均分。

但是当我尝试以下方法时

    public static void main (String[] args) throws java.lang.Exception
{
    String num = "1E-12x10";
    String[] numArr = num.split("[x(?<!E)\\-]");
    System.out.println(numArr[0] + " " + numArr[1] + " " + numArr[2]);

}


我期望字符串在“ x”上分割,但不在“-”上分割。但是,发生的事情是它拆分为“ x”,“ E”和“-”。我不太确定这是怎么回事。

最佳答案

您不能在字符类中放置隐藏式字符。您需要使用替代方法,如下所示:

String[] numArr = num.split("x|(?<!E)-");


这会将字符串拆分为任何x字符或任何-字符之后的E。另请注意,在这种情况下,\\不必在-之前。

10-07 21:05