Java 取一个字符串,将其除以2个数字和一个运算符

Java 取一个字符串,将其除以2个数字和一个运算符,java,Java,我正在尝试做一个项目,用户输入一个简单的数学问题,比如14+3,程序将做一些无关的事情。为此,我需要第一个数字和第二个数字作为两个不同的整数,以及作为字符的运算符。所以我尝试了以下代码: String str = ""; str = scan.next(); str.replaceAll(" ",""); int ans = 0; int len = str.length(); int pos = 0; String str1 = ""; char opr = ' '; String str

我正在尝试做一个项目,用户输入一个简单的数学问题,比如14+3,程序将做一些无关的事情。为此,我需要第一个数字和第二个数字作为两个不同的整数,以及作为字符的运算符。所以我尝试了以下代码:

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中出现异常:字符串索引超出范围:2位于java.lang.String.charAtUnknown源

有人能解释一下我的代码有什么问题吗?
顺便说一下,我对java很陌生,而且C++更优秀。

你在这行中有一个错误,OPR= STR.CHARATI;因为如果for循环没有中断,i=len和str.charAtlen将超过str长度。

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

    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

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

请检查此解决方案。此代码段将字符串拆分为两个数组,一个包含整数,另一个包含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();

注意str.replaceAll,;不会做你认为它会做的事。这是一个表达式-它不会更改字符串。字符串是不可变的-在其上定义的所有操作都会创建一个新对象,而不是更改原始对象。因此,您需要将其分配回str str=str.replace…如果这是真正的任务而不是家庭作业,那么您应该使用常规表达式请不要在此处询问您的大学作业/家庭作业问题。@SharonBenAsher如果这是真正的任务,他们应该使用表达式解析器,不是正则表达式。@AsadChoudhary询问代码问题是完全正确的,不管是不是家庭作业。家庭作业的问题围绕着努力和调试的证据,而他得到操作的逻辑是错误的。它计算错误的位置,第二个循环中的复制粘贴代码使他的逻辑错误两次:P