字符串S =“ 3乘3加3 3 1”
我想得到两个字符串数组 一个是{“ multiply”,“ add”,“ add”} 另一个是{“ 3”,“ 3”,“ 3”,1}
我如何得到它?我尝试使用
String operators[] = s.split("[0-9]+");
String operands[] =s.split("(?:add|multiply)");
但是,它不起作用。
答案 0 :(得分:1)
您应该使用Matcher
而不是split
:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
...
List<String> operators = new ArrayList<String>();
Matcher m = Pattern.compile("add|multiply").matcher(s);
while (m.find()) {
operators.add(m.group());
}
List<String> operands = new ArrayList<String>();
Matcher m = Pattern.compile("[0-9]+").matcher(s);
while (m.find()) {
operands.add(m.group());
}
答案 1 :(得分:0)
您可以使用Java 8 groupingBy
。
Map<Boolean, List<String>> map = Arrays
.stream(s.split(" "))
.collect(Collectors.groupingBy(e -> e.matches("\\d+")));
System.out.println(map);
结果是:
{false=[multiply, add, add], true=[3, 3, 3, 1]}
您可以通过以下方式获取运算符和操作数:
List<String> operators = map.get(false);
List<String> operands = map.get(true);