単純な数式を解析するために複雑な正規表現は必要ありません。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
ます。