![](/img/trans.png)
[英]Regex to get String array by splitting with operators ( ! , & , ( , ) , | ) with all string's start and end position In Java
[英]Regex for splitting a string to get operators
我有一个字符串= A + B + CC-D0。 我想使用正则表达式将其拆分以获取ops {+,+,-}的数组
我试过正则表达式:
"[^+-]"
但是输出显示了一个{,+,+,,+}的数组,为什么?
String s1 = "A+B+C-D";
String s2 = "A0+B0";
String[] op1 = s1.split([^+-]);
String[] op2 = s2.split([^+-]);
for(int i = 0; op1.length; i++){
System.out.println(op1[i]);
}
这是输出:
Output of op1:
""
"+"
"+"
""
"-"
Output of op2:
""
""
"+"
用空字符串替换除运算符以外的所有字符,然后根据两个运算符之间的边界分割结果字符串。
String s1 = "A+B+C-D";
String[] op1 = s1.replaceAll("[^+-]","").split("(?<=.)(?=.)");
for(String i: op1){
System.out.println(i);
}
输出:
+
+
-
(?<=.)
正向后看,它断言匹配必须以字符开头。
(?=.)
正向超前,断言必须在匹配项后跟一个字符。
问题是,您正在分割单个字符,而不是+
或-
。 当您拆分字符串ABC
,它将分别在A
, B
和C
上拆分3次-因此,您将获得一个数组- ["", "", "", ""]
。
为避免此问题,请在正则表达式上使用量词:
String s1 = "A+B+C-D";
String s2 = "A0+B0";
String[] op1 = s1.split("[^+-]+");
String[] op2 = s2.split("[^+-]+");
System.out.println(Arrays.toString(op1));
System.out.println(Arrays.toString(op2));
这在"[^+-]+"
上分裂。
现在要删除数组开头的空元素,您必须使用replaceFirst()
从字符串中删除第一个定界符,可能是:
String[] op1 = s1.replaceFirst("[^+-]+", "").split("[^+-]+");
System.out.println(Arrays.toString(op1)); // [+, +, -]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.