取一个字符串并将其分为2个数字和一个运算符

时间:2019-04-14 11:36:49

标签: java

我正在尝试做一个项目,其中用户键入一个简单的数学问题(如14 + 3),并且程序将要做某事(无关紧要)。对于那个“东西”,我需要第一个数字和第二个数字作为两个不同的整数,以及运算符作为char。所以我尝试了这段代码:

String str = "";
str = scan.next();
str.replaceAll(" ","");

int ans = 0;
int len = str.length();
int pos = 0;

String str1 = "";
char opr = ' ';
String str2 = "";

int i;
for (i = 0 ; i < len ; i++)
{
    if (str.charAt(i) <= '9' && str.charAt(i) >= '0') 
    {
        pos = i;
        str1 = str1 + str.charAt(i);
    }
    else
        break;
}

opr = str.charAt(i);

for (int j = i + 1 ; j < len - i ; i++)
{
    if (str.charAt(i) <= '9' && str.charAt(i) >= '0') 
        str2 = str2 + str.charAt(i);
}

int n1 = Integer.parseInt(str1);
int n2 = Integer.parseInt(str2);

我遇到了这个问题: 线程“主”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:java.lang.String.charAt(未知源)处为2

有人可以解释我的代码有什么问题吗? 顺便说一句,我是Java的新手,并且对c ++更好。

3 个答案:

答案 0 :(得分:1)

我正在使用正则表达式为您的根本原因提供解决方案。

    String s="3*4+5";
    String s1[]=s.split("[[+]-[*]/]");//put all the required symbols 
    System.out.println(s1[0]);//prints 3
    System.out.println(s1[1]);//prints 4
    System.out.println(s1[2]);//prints 5

注意:“ +”和“ *”是特殊的正则表达式符号,因此我已将它们括在“ []”中。

答案 1 :(得分:0)

此行opr = str.charAt(i);中出现错误,因为如果for循环没有中断,则i = len和str.charAt(len)会超过str的长度。

答案 2 :(得分:0)

请检查此解决方案。此代码段将字符串分成2个数组,一个包含整数,另一个包含char数学运算符

    String str = "14+58*81*95%44";
    String s1[]=str.split("(?=[/*+%])|(?<=[/*+%])");

    ArrayList<String> mathamaticalOpertaorsList=new ArrayList<String>();
    ArrayList<Integer> numbersList=new ArrayList<Integer>();

    for(int i=0;i<s1.length;i++) {
        if(i%2==1) {
            mathamaticalOpertaorsList.add(s1[i]);
        }
        else {
            numbersList.add(Integer.parseInt(s1[i]));
        }
    }

    char[] mathOpertaorschars = mathamaticalOpertaorsList.toString().toCharArray();