如果字符串是:
String common_mpCon = "20+5*Math.ceil(2/7)"; //(equals 200 btw)
我正在尝试让String在转换为short时执行所有操作。可能吗?使用Short.parseShort(common_mpCon)
,我得到一个异常抛出,用谷歌搜索我发现没有有用的答案,所以我最终决定问stackoverflow:D
答案 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。