Java子串难度

时间:2014-04-06 23:48:49

标签: java

我知道如何使用substring(),但为什么这不起作用,用户输入一个类似的方程式 " 5t + 1"在" +"之前和之后有一个空格。我希望tVariable在它之前保持整数,在case 5中,常量应该在此case 1中保持常量整数,但是我得到一个超出范围的错误。

import java.util.*;
import javax.swing.JOptionPane;

public class project3030  {    
    public static void main(String[] args) {
        String L1x, tVariable, constant;
        L1x = JOptionPane.showInputDialog("This is the format (x=5t + 1)");

        int endIndex = L1x.indexOf("t");

        tVariable = L1x.substring(0, endIndex);

        int beginIndex = L1x.lastIndexOf(" ");
        int endIndex2 = L1x.indexOf("");            

        constant = L1x.substring(beginIndex, endIndex2);

        System.out.println(tVariable + constant);
    }
}

3 个答案:

答案 0 :(得分:1)

您需要将其更改为更像

的内容
constant = L1x.substring(L1x.lastIndexOf(" ")).trim();

然后当你添加数字时,你必须先解析它们。

int constantInt = Integer.parseInt(constant);

或者您可以使用此解决方案:

String[] input = L1x.split(" "); 

// remove the 't'
String tNum = input[0].substring(0, input[0].length() - 1);
int t = Integer.parseInt(tNum); 
int constant = Integer.parseInt(input[2]); 
String operator = input[1];

if (operator == "-")
    constant *= -1;

答案 1 :(得分:0)

您收到此错误的原因是因为substring()范围已关闭。

您传入的substring()无效范围是因为第一个索引为beginIndex,您将其设置为lastIndexOf(" ")endIndex2设置为indexOf("")这将发生在字符串的开头。

因此,你的范围混淆了。当你发表这个声明时:

constant = L1x.substring(beginIndex, endIndex2);

你给它一个不规范的范围  并将导致指定的错误。

答案 2 :(得分:0)

你也可以采用不同的方式。我们假设您创建了一个JFrame,并且您可以为每个值设置一个文本字段,因此对于每个" t"或常量,然后获得这些值会更简单。对于像t或=这样的字符,您可以使用JLabel,因此它将是JTextFields和JLabel的混合体,我认为它不会那么难看。我几次使用这个解决方案。