代码
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
public class CommonUtil {
public static Pattern pattern = Pattern.compile("(\\d+)|(\\d+\\.\\d+)");
public static List<String> parseArithmeticStr(String str) {
str = str.replaceAll("\\s+", "");
List<String> list = new ArrayList<>();
int step;
for (int i = 0; i < str.length(); ) {
step = 1;
if (isDigital(str.substring(i))) {
list.add(str.substring(i));
i = str.length();
} else {
if (isDigital(str.substring(i, i + step))) {
boolean flag = true;
while (isDigital(str.substring(i, i + step))) {
if (flag && str.substring(i, i + step + 1).contains(".")) {
step += 2;
flag = false;
} else if (isDigital(str.substring(i, i + step))) {
++step;
}
}
--step;
}
list.add(str.substring(i, i + step));
i += step;
}
}
return list;
}
public static boolean isDigital(String val) {
boolean flag = false;
if (pattern.matcher(val).matches()) {
flag = true;
}
return flag;
}
}
测试
import java.util.List;
public class DemoTest {
public static void main(String[] args) {
String str = " 70.3 - 2.8 * 2 - 5 + 400";
List<String> list = CommonUtil.parseArithmeticStr(str);
System.out.println(list);
}
}