我在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
。另请注意,在这种情况下,\\
不必在-
之前。