我有将String值用作变量的情况,例如:
int val1;
int val2;
String s = "val1*val2";
现在我必须获得如下输出:
int output = (value which is calculated in s);
我怎样才能做到这一点?
答案 0 :(得分:1)
你的问题不太清楚。但您可以尝试如下
String s = String.valueOf(val1*val2);
然后
int output = Integer.parseInt(s);
如果你想通过名字获得价值。你可以试试Java-reflection
。
答案 1 :(得分:1)
试试这个它给你预期的o / p但你必须处理反射异常并注意val1 / val2是int。它只是格式样本。
class a {
public int val1 =2;
public int val2 = 3;
public String s = "val1*val2";
public int val = 0;
}
a a1 = new a();
StringTokenizer str = new StringTokenizer(a1.s,"*");
try {
a1.val = (int) a1.getClass().getField(str.nextToken()).get(a1) * (int)
a1.getClass().getField(str.nextToken()).get(a1);
System.out.println("v=" +a1.val);
} catch (Exception e1) {
}
答案 2 :(得分:0)
String
并为变量或符号提取单独的字符串。那么您需要一些名为Reflection的东西来从字符串名称中获取变量及其值
//Reflection example
Field tmpField = yourClassInstance.getClass().getField("val1");
System.out.println(tmpField.get(yourClassInstance)); // this prints the value of val1
然后最后使用解析出的特殊符号和do your math。
答案 3 :(得分:0)
我认为你想要编写一个动态方法来计算字符串给出的东西。如果是,请参阅article
我更喜欢第一种方法,它可以将所有内容评估为java应用程序。
答案 4 :(得分:-1)
这可能有效
String s="20*12";
String opReg="\\D";
Pattern opp=Pattern.compile(opReg);
Matcher m = opp.matcher(s);
int output=0;
if(m.find()){
String op=m.group();
String[] vars=s.split(opReg);
int var1=Integer.valueOf(vars[0]),
var2=Integer.valueOf(vars[1]);
System.out.println(op);
switch(op.charAt(0)){
case '*':
output=var1*var2;
break;
case '/':
output=var1/var2;
break;
case '+':
output=var1+var2;
break;
case '-':
output=var1-var2;
break;
}
}
System.out.println(output);