0

我需要转动一个字符串,例如

class freud IF : 0.010<=cst0.1<=0.02 ^ 0.012<=cst0.2<=0.014 ^ 0.01<=cst0.3<=0.011 ^ 0.009<=cst0.4<=0.01 ^ cst0.5=0.009 ^ 0.008<=cst0.6<=0.009 ^ 0.008<=cst0.7<=0.009 ^ 0.007<=cst0.8<=0.009 ^ 0.007<=cst0.9<=0.009 ^ 0.008<=cst1.0<=0.012

进入实际的 Java if 语句:即

if(0.010 <= cst0.1 && cst0.1 <= 0.02 .....)

其中 cst0.1 成为浮点数等的名称。

有任何想法吗?我尝试将字符串拆分为其组件,但我需要的所有字符串都不同!

谢谢

4

3 回答 3

0

我想我有一个答案。这是我的步骤,然后是代码:

  1. 确定行中是否有 IF
  2. 如果是这样,则使用 split(" ^ ") 将行拆分为相等组件-这将因结构而异。
  3. 现在检查每个组件,检查是否有相等“<=”,“=”
  4. 根据结构独立处理。
  5. 将每个“0.025”(例如)转换为浮点数
  6. 根据 3,5 和要比较的数据创建 JAVA if 语句。
  7. 如果所有等式在整条线上都成立,则记录为进行。如果一个失败,脱离,得到新的线。如果全部保持函数返回初始值,即艺术家字符串。

无论如何这里是代码:

while(line != null ){
            boolean equality = false;

            String[] split_line;
            String[] first_part;
            String[] statements;
            String[] components;

            if(line.contains("IF")){
                split_line = line.split(":");
                statements = split_line[1].split(" ^ ");
                int attrib_pos = 0;

                for(int pos = 0; pos < statements.length; pos++){
                    if(statements[pos].contains("<=")){
                        components = statements[pos].split("<=");
                        float component_1 = new Float(components[0]);
                        // middle component is attribute
                        float component_2 = new Float(components[2]);

                        if(!(( component_1 <= data[attrib_pos]) && (data[attrib_pos] <= component_1))){
                            break;
                        }
                    }
                    else if(statements[pos].contains("=") ){
                        components = statements[pos].split("=");
                        float component_1 = new Float(components[1]);
                        if(!(component_1 == data[attrib_pos])){
                            break;
                    }
                        // if we have not found a false statement, increase no of attributes which hold
                        attrib_pos++;
                }
                }
                // if we have run through all attributes as holding then return, as we have found a true rule
                if(attrib_pos-1 == statements.length){
                    _return = (split_line[0].split("\\s+"))[2];
                    return _return;
                }
            }
            // once we have read the line, read another 
        line = read.readLine();

        }               
    }
于 2012-08-17T10:08:51.367 回答
0

从您所展示的内容来看,将点替换为有效的标识符字符就足够了,例如,在X 和 Y 是数字_形式的字符串中,并替换为.cstX.Y^&&

为了使结果 if 语句有效,您还应该声明cstX_Y您引入的所有变量。

于 2012-08-17T09:14:32.033 回答
0

您可以尝试创建评估方法boolean evaluate(String stringToEvaluate) ,它将您的字符串分割成段并评估每一位

public class MyClass {
    public boolean evaluate(String stringToEvaluate)
    {
    boolean exprvalue = true;
    for (String string : stringToEvaluate.split("^"))
            {
            exprvalue = exprvalue && evaluateLE(string);
            }
    return exprvalue;
    }

    private boolean evaluateLE(String string) {
        String[] values = string.split("<=");
        if (values.length==2)
        {
            return evaluateVal(values[0]) <= evaluateVal(values[1]); 
        }

        return evaluateOtherLogicalExpr(string);
    }

    private float evaluateVal(String string) {
        if (isExpresion(string)) return evaluateArthmeticalExpr(string);
        if (isVariable(string)) return evaluateVariable(string);

        return Float.parseFloat(string);
    }
}
于 2012-08-17T09:59:52.847 回答