基本上我想将一个字符串拆分成一个由空格和运算符分隔的数组,但在删除空格时保留运算符
离。 3 52 9+- 2 3 * /
将是[3][52][9][+][-][2][3][*][/]
答案 0 :(得分:1)
分割时所需的逻辑是消耗分隔符,这些分隔符是空格,而不是消耗分隔符,这些分隔符是算术符号。为此,我们可以使用前瞻符号进行拆分,并使用普通\\s
按空格分割并将其从结果中删除。
String input = "3 52 9+- 2 3 * /";
input = input.replaceAll("([\\+\\-*/])(.)", " $1$2")
.replaceAll("\\s+", " ");
String[] parts = input.split("(?<=[\+\-*/])|\\s")
System.out.println(Arrays.toString(parts));
<强>输出:强>
[3, 52, 9, +, -, 2, 3, *, /]
答案 1 :(得分:0)
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
String input = "3 52 9+- 2 3 * /";
input = input.replaceAll("([\\+\\-*/])", " $1 ").replaceAll("\\s+", " ");
String[] parts = input.split("(?<=[+\\-*/ ])");
List<String> finalList = new ArrayList<String>();
for(String part : parts) {
if(part.trim().length() > 0) {
finalList.add(part);
}
}
System.out.println(finalList);
}
}
<强>输出强>
[3 , 52 , 9 , +, -, 2 , 3 , *, /]
答案 2 :(得分:-1)
试试这个正则表达式:
([\-]?[^\s\+\-\*\/]+|[\+\-\*\/])
将选择:
[\-]?
已签名或未签名
[^\s\+\-\*\/]
个字符既不是空格也不是[+ - * /]
or
[\+\-\*\/]
[+ - * /]
只是符合您的情况。