文字列評価関数を書き込もうとしています
evaluate("4 + 1") ; // returns 5
evaluate("4 + 1 + 3") ; // returns 8
evaluate("4 + 1 * 3") ; // returns 7 (not 15)
The operators are + - / and *
ただし、最初は、正規表現を使用して演算子と数字を収集することでした。これらは一致する可能性があるためです。そして、その情報を見つけた後、どうにかしてオペレーターに優先/*
順位を付ける方法を見つけてください。-+
これが私が始めた方法です:
static String regex = "([\\+\\*-/])+";
static String digitRegex = "(\\d)+";
public static void main(String[] args) {
System.out.println(getOperators("4 + 1 * 3"));
}
public static List<String> getOperators(String input) {
Pattern p = Pattern.compile(regex);
Matcher matcher = p.matcher(input);
List<String> operatorList = new ArrayList<String>();
int count = 0;
while (matcher.find()){
if (matcher.group(count) != null && matcher.group(count).trim().length() > 0) {
operatorList.add(matcher.group(count));
count++;
}
}
return operatorList;
}
これで、同じロジックを使用して数字を抽出する別のメソッドを作成できます。
public static List<Integer> getDigits(String input) {
Pattern p = Pattern.compile(digitRegex);
Matcher matcher = p.matcher(input);
List<Integer> digitList = new ArrayList<Integer>();
int count = 0;
while (matcher.find()) {
if (matcher.group(count) != null && matcher.group(count).trim().length() > 0) {
digitList.add(Integer.valueOf(matcher.group(count)));
count++;
}
}
return digitList;
}
今、私が立ち往生している部分です。#1 この上記の方法は、3 番目の例では失敗します。
evaluate("4 + 1 * 3") ; // returns 7 (not 15)
そして、この#2前の例を試しても、正しい順序で配置する方法がわかりません。
私はまったく正しい方向に進んでいますか?誰かに役立つアドバイスがあれば教えてください。