-2
Javaの場合、"(3+5)x + x^(6/2)"
のような文字列がある場合、かっこ内のすべての式を評価で置き換えて、文字列"8x + x^3"
を得る方法はありますか?括弧内の式を文字列で評価する
Javaの場合、"(3+5)x + x^(6/2)"
のような文字列がある場合、かっこ内のすべての式を評価で置き換えて、文字列"8x + x^3"
を得る方法はありますか?括弧内の式を文字列で評価する
これは実行しようとしている内容によって異なります。より複雑なケースでは、ANTLRのようなパーサジェネレータを使用することができます。式があなたの例(単純な算術)よりも複雑でない場合は、JavaScript/Nashornを使って式を分析することができます。
public static void main(String[] args) throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
String x = "(3+5)x + x^(6/2)";
// can also be extended to expressions like 3+5*5 with
// Pattern.compile("\\(\\d+([+/*-]\\d+)+\\)")
Pattern simpleArithmeticExpr = Pattern.compile("\\(\\d+[+/]\\d+\\)");
Matcher matcher = simpleArithmeticExpr.matcher(x);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
String expr = matcher.group();
String evaluatedExpr = String.valueOf(engine.eval(expr));
matcher.appendReplacement(sb, evaluatedExpr);
}
matcher.appendTail(sb);
System.out.println(sb); // 8x + x^3
}
Javascriptのソリューションは、/ヘビー級を遅くすることであるならば、あなたもそれを自分で解析することができます:あなたができるUse the backreference in a regex to replace a text dynamicallyのソリューションを使用して
。
ご協力いただきありがとうございます。 – nilcit