【问题标题】:Java Type Convert from String to Integer [duplicate]Java类型从字符串转换为整数[重复]
【发布时间】:2012-10-19 09:18:16
【问题描述】:

谁能帮我解决这个问题

String expr ="1.3*60";
//Integer xx=Integer.valueOf();
int i = Integer.parseInt(expr);
System.out.println("xx "+i);

当我编译时它显示数字格式异常,我在 java 中处于开始阶段,所以请帮我解决这个问题,非常感谢

【问题讨论】:

    标签: java


    【解决方案1】:
    "1.3*60";
    

    不是有效的integer

    Integer.parseInt(...); 只能解析有效整数

    如果您想使用表达式评估引擎。见thisthis

    【讨论】:

    【解决方案2】:

    Integer.parseInt 不计算数学表达式;它只是将整数的 String 格式转换为 Integer 类型。

    例如:

    int x = 5;
    int y = Integer.parseInt("5");
    
    x == y; // => true
    

    要评估像 1.3 * 60 = ? 这样的数学表达式,您可能需要搜索 Java 数学解析/评估库。 (see this question, for example)

    【讨论】:

      【解决方案3】:
      String[] tokens = expr.split(delims);
      ...
      int i = Integer.parseInt(expr);
      

      您已经将字符串拆分为浮点数和整数,因此您需要将“tokens[0]”和“tokens[1]”字符串传递给 parseInt(),而不是原始字符串“expr”,尽管这些字符串中有一个是浮点数,所以我不确定这是否可行。

      【讨论】:

        【解决方案4】:

        检查此代码:

        String expr ="1.3*60";
        String[] tokens = expr.split("\\*");
        float j = Float.parseFloat(tokens[0]);
        float k = Float.parseFloat(tokens[1]);
        System.out.println(j);
        System.out.println(k);
        System.out.println(j*k);
        

        所以,首先你必须使用正则表达式进行标记(我不会谈论那个),这就是你所拥有的分割部分。然后,由于您正在解析的某些数字不是整数,您应该使用浮点数或相应的类型,或者使用 try/catchs 或其他任何方法来忽略非 int 值。最后,valueOf 返回对象,而 parseX 返回原语,我认为这是您需要的。

        【讨论】:

        • 是的,我同意,该表达式将从数据库中动态加载,它可能是 expr=(1.3+60-80),所以任何动态表达式的解决方案
        • 然后,您必须在拆分令牌时添加更多逻辑,同时考虑所有可能的运算符及其优先级。所以你的代码可能和要解析的动态表达式一样复杂。您可以按 *、/、+ 和 - 拆分,然后遍历生成的数组。反之,使用 js 引擎更容易,但资源成本更高。
        【解决方案5】:

        如果您使用的是 jdk 1.6,您可以使用内置的 javascript 引擎来评估表达式:

        import javax.script.ScriptEngineManager;
        import javax.script.ScriptEngine;
        
        public class expressionEvaluate{
          public static void main(String[] args) throws Exception{
            ScriptEngineManager sem = new ScriptEngineManager();
            ScriptEngine scriptEngine = sem.getEngineByName("JavaScript");
            String expr = "1*3+5";
            System.out.println(scriptEngine.eval(expr));
            } 
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-01
          • 2011-06-29
          • 2015-03-26
          • 1970-01-01
          • 1970-01-01
          • 2013-01-17
          • 1970-01-01
          相关资源
          最近更新 更多