我正在尝试做一个项目,其中用户键入一个简单的数学问题(如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 ++更好。
答案 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();