您不需要复杂的正则表达式来解析简单的数学表达式。StringTokenizer
足以解析此类表达式。由于您要制作一个后缀计算器,您可能希望忽略空格并返回所有运算符,如*
,+
等等。
这是split
功能
public static List<String> split(String line, String delim, boolean includeDelim, boolean removeWhiteSpace) {
List<String> tokens = new ArrayList<String>();
StringTokenizer parser = new StringTokenizer(line, delim, includeDelim);
while (parser.hasMoreTokens()) {
String token = parser.nextToken();
if (removeWhiteSpace) {
token = token.replaceAll("\\s+", "");
}
tokens.add(token);
}
return tokens;
}
上述功能可让您指定是否要返回所有分隔符或分隔符之间的部分。您也可以选择忽略空白。
这是我的主要功能
public static void main(String aa[]) {
final String DELIM = "+-*/^#_";
Scanner in = new Scanner(System.in);
while (true) {
String line = in.nextLine();
System.out.println(">" + split(line, DELIM, true, true));
}
}
一些样本输出
12 ^ 36 - 15 + 17
>[12, ^, 36, -, 15, +, 17]
500*6/3+2
>[500, *, 6, /, 3, +, 2]
我正在恢复所有这些分隔符。您可以操作该split
函数返回的列表。