使用字符串值作为变量

时间:2013-12-04 09:15:51

标签: java

我有将String值用作变量的情况,例如:

int val1;
int val2;
String s = "val1*val2";

现在我必须获得如下输出:

int output = (value which is calculated in s);

我怎样才能做到这一点?

5 个答案:

答案 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)

  1. 您首先需要解析不同的元素(变量名和特殊字符)。即使用StringTokeniser提取每个元素或迭代String并为变量或符号提取单独的字符串。
  2. 那么您需要一些名为Reflection的东西来从字符串名称中获取变量及其值

    //Reflection example
    Field tmpField = yourClassInstance.getClass().getField("val1");      
    System.out.println(tmpField.get(yourClassInstance)); // this prints the value of val1
    
  3. 然后最后使用解析出的特殊符号和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);