2

整数または小数と、トークンに分割された 4 つの単純な演算を認識したいのですが、小数が機能しません。助けてもらえますか?

私のレジは

expression = "2.7 + 3 * (1 + 2)";
String expRegString = "\\d+(\\.\\d+)*|[\\(\\)\\+\\-\\*\\/]";
Pattern expPattern = Pattern.compile(expRegString);
Matcher expMatcher = expPattern.matcher(expression);

while (expMatcher.find()){
    System.out.println(expMatcher.group());
}

私にくれます"+", "3", "(" , "1", "+" , "2",")"

編集:正しい結果は"2.7","+", "3", "(" , "1", "+" , "2",")"

4

2 に答える 2

3

すべてのスペースを削除してから、文字の前後にあるすべての場所でデータを分割してみてください- + * / ( )

これでうまくいくはずです

String expression = "2.7 + 3 * (1 + 2)";
String[] tokens = expression.replaceAll("\\s+", "").split("(?<=[-+*/()])|(?=[-+*/()])");

for (String token : tokens)
    System.out.println(token);

出力

2.7
+
3
*
(
1
+
2
)
于 2013-11-10T15:43:51.183 に答える
0

それはあなたのために働くかもしれません:

expression = "2.7 + 3 * (1 + 2)";
String expRegString = "\\d+(\\.\\d+)*|\\(\\d+(\\.\\d+)*[\\+\\-\\*\\/]\\d+(\\.\\d+)*\\)";
于 2013-11-10T15:44:35.713 に答える