首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >完成数学和的Java字符串

完成数学和的Java字符串
EN

Stack Overflow用户
提问于 2014-07-25 12:09:05
回答 3查看 635关注 0票数 0

在java中,我目前正在试图找到一种方法,通过将文本输入JTextField,将其放入字符串,并将其转换为int并进行求解,从而找到一种做数学之和的方法。问题是,我不想简单地把一个数字放入字符串中,而是一个实际的和,包括加法、减法等。

目前,它将接受这样的操作,从字符串转换为int,但是当我执行'1+1‘甚至'1+’时,它会抛出异常,因为'+‘不是一个数字。

我已经明白了,它是行不通的,因为int只允许数字。

有没有一种方法可以安全地在文本字段中键入一个完整的和,并以某种方式将其转换为int?就像键入7-2*5,然后答案被保存在int中?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-25 12:12:51

您可以使用JavaScript引擎:

代码语言:javascript
复制
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
String expression = textField.getText();
System.out.println(engine.eval(expression));

允许所有方程的编辑:

你现在所要做的就是允许像罪恶,因为,晒黑这样的事情:

代码语言:javascript
复制
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
String expression = textField.getText();

// Between here...
        expression = expression.
                replace("sin", "Math.sin").
                replace("cos", "Math.cos").
                replace("tan", "Math.tan").
                replace("sqrt", "Math.sqrt").
                replace("log", "Math.log").
                replace("pi", "Math.PI");
// And so on...

System.out.println(engine.eval(foo));

所以你可以做这样的事情:

代码语言:javascript
复制
5 + 5 - 2 / 5 + sin(55) - log(20)

你想要什么都行。

票数 2
EN

Stack Overflow用户

发布于 2014-07-25 12:28:14

这会帮你的。

代码语言:javascript
复制
  import javax.script.ScriptEngineManager;
    import javax.script.ScriptEngine;

    public class Test {
      public static void main(String[] args) throws Exception{
        ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine engine = mgr.getEngineByName("JavaScript");
        String foo = "40+2";//any mathematical operations +,-,*,/ 
        System.out.println(engine.eval(foo));
        } 
    }

在这里,您可以使用描述log/cos等函数的方法

代码语言:javascript
复制
String st = "10+3";
int result;
for(int i=0;i<st.length();i++)
{
  if(st.charAt(i)=='+')
  {
    result=Integer.parseInt(st.substring(0, i))+Integer.parseInt(st.substring(i+1, st.length()));
    System.out.print(result);
  }         
}
票数 2
EN

Stack Overflow用户

发布于 2014-07-25 12:18:49

确保java.util.regex.Matcher或java.util.regex.Pattern用于ex:

代码语言:javascript
复制
import java.util.regex.Matcher; import java.util.regex.Pattern;

public class IpDnsValidateUtils {
    public static final int MAX_DNS_LEN = 39;
    private static final Pattern ptrnIp = Pattern
        .compile("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"); 
    private static final Pattern ptrnDomainName = Pattern
        .compile("^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])(\\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])){0,}[.][a-zA-Z]{2,5}$"); 

    public static boolean isValidIp(String value, boolean emptyTrue) {  boolean ret = false;    if (!value.isEmpty() || !emptyTrue) {
        Matcher m = ptrnIp.matcher(value);
        ret = m.matches();  } else {
        ret = true;     }   return ret;
    }

    public static boolean isValidDns(String value, boolean emptyTrue) {     boolean ret = false;    if (!value.isEmpty() || !emptyTrue) {
        Matcher m = ptrnDomainName.matcher(value);
        ret = m.matches();  } else {
        ret = true;     }   return ret;
    } }

或StringTokenizer类

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24955479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档