有没有一种方法可以将带有子字符串的JTextField拆分为一个double?

时间:2019-04-27 08:40:52

标签: java swing parsing double jtextfield

有没有一种方法可以使用子字符串拆分JTextField并将其返回为double。问题是我将收到用户的输入,即JTextField中的3 + x + 5 * 7 + y或5 * y-x / 4,这将是一个字符串。但是为了在我的计算中使用它,我相信必须将其拆分或解析为双精度变量。

我相信您可以获取文本的索引,并在每次出现-,+,*,/,x或y时进行检查,并将子字符串设置在一起,但是我不知道该怎么做。

将其命名为double i并在以下上下文中使用的变量:

public void solve(double y, double h, int j, double i){      
xArray = new double[j];
yArray = new double[j];
for(int dex = 0; dex < j; dex++){
    F1 = h*f(x,y,i);
    F2 = h*f(x+h/2,y+F1/2,i);
    F3 = h*f(x+h/2,y+F2/2,i);
    F4 = h*f(x+h,y+F3,i);

    y = y + 1.0/6.0*(F1+2*F2+2*F3+F4);

    xArray[dex] = x;
    yArray[dex] = y;

    x = x + h;
   }   
 } 
private double f(double x, double y, double i){
 return i; 
} 

1 个答案:

答案 0 :(得分:0)

  

我相信您可以获取文本的索引,并在每次出现-,+,*,/,x或y时检查并将子字符串设置在一起,但是我不知道该怎么做。

这可以通过KeyListener界面来完成,该界面提供3种方法可以帮助您keyPressedkeyReleasedkeyTyped,每种方法都有其自己的功能(尽管他们的名字签了出来,但他们的执行时间相差很大。)

这是一个示例

public class MyListener implements KeyListener {

        @Override
        public void keyTyped(KeyEvent e) {
            //empty implemntation , we are not using it 
        }

        @Override
        public void keyPressed(KeyEvent e) {
            //here we are implementing what we want for the app
            //using the KeyEvent method getKeyChar() to get the key that activated the event.
            char c = e.getKeyChar();
            //let's check it out !
            System.out.println(c);
            //now we got it we can do what we want 
            if (c == '+'
                    || c == '-'
                    || c == '*'
                    || c == '/') {
                // the rest is your's to handle as your app needs
            }
        }

        @Override
        public void keyReleased(KeyEvent e) {
            //empty implemntation , we are not using it 
        }

    }

因此要获得用户点击的键,我们可以从KeyEvent对象获得它。

当进入组件时,我们像这样添加它

JTextComponent jtc = //create it whether it's text field , area , etc...
MyListener ml = new MyListener();
jtc.addKeyListener(ml);

其余的内容取决于您将如何使用文本String,并记住此答案是如何知道用户刚刚键入的内容(一个字符一个字符),但是作为一种方法,这非常糟糕!想象用户决定删除数字或更改插入符号的位置,您将如何处理? 因此,正如我们的朋友@phflack所说,我建议您使用RegexString.split 像这样:-

String toSplit = "5-5*5+5";
        String regex = "(?=[-+*/()])";
        String[] splited = toSplit.split(regex);
        for (String s : splited) {
            System.out.print(s + ",");
        }

及其输出

5,-5,*5,+5,

但这并不是Regex,我只是向您展示了一个示例,以获取有关Regex read this的更多信息,而对于KeyListener您可以阅读{{3 }},希望这可以解决您的问题。