在JAVA中按特定字词拆分字符串

时间:2018-08-03 23:09:33

标签: java regular-language

字符串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)");

但是,它不起作用。

2 个答案:

答案 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);