将字符串操作转换为短操作(JAVA)

时间:2011-07-02 22:13:14

标签: java

如果字符串是:

String common_mpCon = "20+5*Math.ceil(2/7)"; //(equals 200 btw)

我正在尝试让String在转换为short时执行所有操作。可能吗?使用Short.parseShort(common_mpCon),我得到一个异常抛出,用谷歌搜索我发现没有有用的答案,所以我最终决定问stackoverflow:D

2 个答案:

答案 0 :(得分:2)

如果您使用的是Java 6,则可以考虑使用javax.tools.javacompiler类。这是一项很多工作,你需要非常谨慎,用户必须在JVM实例中执行任意代码。

那就是说http://www.java2s.com/Code/Java/JDK-6/CompilingfromMemory.htm有一个很好的例子。这不是我的代码而且我不想剽窃,所以我将解释这个技巧并让你参考完整例子的链接。

首先,构建一个包含您要调用的代码的字符串。与实际源代码一样,换行符是可选的。

String common_mpCon = "20+5*Math.ceil(2/7)";
String code;
code = "public class MyShortEvaluator {\n";
code += "    public static Short calculate() {\n";
code += "        return (" + common_mpCon + ");\n";
code += "    }\n";
code += "}\n";

创建一个JavaFileObject,它从getCharContent方法返回code的值。将其添加到JavaFileObject的集合中,将结果传递给JavaCompiler实例的getTask()方法以获取CompilationTask,并调用生成的任务的call()方法。

如果一切顺利,您可以使用Class.forName("MyShortEvaluator").getDeclaredMethod来获取对已定义类的新静态方法的引用。

当然也可以使用其他反射技术。您可以在接口中定义Calculate()方法,让MyShortEvaluator实现该接口,然后使用newInstance获取对实际对象的引用。

答案 1 :(得分:1)

java.lang.String不会为您执行这些操作。相信JVM告诉你的时候。

如果您将其解释为JavaScript,也许您可​​以将其传递给eval()方法并获得所需内容。试试Rhino