用于拆分字符串以获取运算符的正则表达式
Regex for splitting a string to get operators
我有一个字符串 = A+B+CC-D0。
我想使用正则表达式将其拆分以获得操作数组 {+,+,-}
我试过正则表达式:
"[^+-]"
但是输出给了我一个数组 { ,+,+, ,+} ,为什么?
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
时,它将被拆分 3 次 - 分别在 A
、B
和 C
上,因此你将得到一个数组 - ["", "", "", ""]
.
要避免此问题,请在正则表达式上使用量词:
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)); // [+, +, -]
我有一个字符串 = A+B+CC-D0。 我想使用正则表达式将其拆分以获得操作数组 {+,+,-}
我试过正则表达式:
"[^+-]"
但是输出给了我一个数组 { ,+,+, ,+} ,为什么?
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
时,它将被拆分 3 次 - 分别在 A
、B
和 C
上,因此你将得到一个数组 - ["", "", "", ""]
.
要避免此问题,请在正则表达式上使用量词:
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)); // [+, +, -]