如:
输入字符串:"1+2+3" 输出:"6"
输入字符串:"1+2-3" 输出:"0"
输入字符串:"-1+2+3" 输出:"4"
输入字符串:"1" 输出:"1"
输入字符串:"-1" 输出:"-1"
已知条件:输入的运算都是整数运算,且只有加减运算
要求:输出为String类型,不能使用内建的eval()函数
数据范围:计算过程中所有值满足
,输入的字符串长度满足 
输入字符串:"1+2+3"
输出:"6"
1+2+3
6
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s=in.next();
s=s.replaceAll("-","+-");
int sum=0;
String si="";
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='+'){
if(si.equals("")) continue;
sum+=Integer.parseInt(si);
si="";
}else{
si+=s.substring(i,i+1);
}
}
sum+=Integer.parseInt(si);
System.out.printf("%d",sum);
}
} import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
if(!String.valueOf(str.charAt(0)).equals("+")&&!String.valueOf(str.charAt(0)).equals("-")){
str="+"+str;
}
int start=0;
ArrayList<String> list=new ArrayList<String>();
for(int i=1;i<str.length();i++){
if(String.valueOf(str.charAt(i)).equals("+")||String.valueOf(str.charAt(i)).equals("-")){
list.add(str.substring(start,i));
start=i;
}
}
int n=str.length();
list.add(str.substring(start,n));
int result=0;
for(int i=0;i<list.size();i++){
if(String.valueOf(list.get(i).charAt(0)).equals("+")){
result+=Integer.parseInt(list.get(i).substring(1,list.get(i).length()));
}else{
result+=Integer.parseInt(list.get(i).substring(1,list.get(i).length()))*(-1);
}
System.out.println(result);
}
}
对输入的字符串进行截取,首先对字符串首个位置进行符号填充,无符号的添加负号。随后按照符号对字符串进行截取。针对每个截取的字符串,判断首字母正负,将数字部分化成数字,进行乘法计算再相加
分割字符串,按符号分割的话,就得到一个保存数字的数组;按数字分割的话,就得到一个保存运算符号的数组
因为补了加号,所以符号的个数和数字的个数是相同的。
从符号数组中拿出一个符号,再从数字数组中拿出一个数,两者进行结合,就得到了一个包含符号的数字,把这个数字放入list集合中。
遍历list集合,累加求和即可得出答案。
PS:正则表达式分割字符串时,可能会产生空字符串“”,要把空字符串去掉。代码中的
noEmptyString()方法就是用来去除空字符串的。
import java.util.*;
public class Main
{
public static void main(String [] args)
{
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
String str=sc.next();
String str2=str;
if(!(""+str.charAt(0)).matches("-"))
{
str2="+"+str;//把加号补上
}
Object [] array1=noEmptyString(str2.split("[\\-\\+]"));//保存数的数组
Object [] array2=noEmptyString(str2.split("[0-9]+"));//保存符号的数组
List<Integer> list=new LinkedList<>();
for(int i=0;i<array2.length;i++)
{
String oper=(String)array2[i];
String num=(String)array1[i];
String total=oper+num;
int c=Integer.parseInt(total);
list.add(c);
}
int sum=0;
for(int item:list)
{
sum+=item;
}
System.out.println(sum);
}
}
public static Object[] noEmptyString(String [] array)
{
List<String> list=new LinkedList<>();
for(int i=0;i<array.length;i++)
{
String item=array[i];
if(!item.equals(""))//如果不为空字符串
{
list.add(item);
}
}
return list.toArray();
}
} //注意题目描述的输入左右是带双引号的,但是实际示例输入是没有带双引号的
//我一开始没注意到这一点,然后就按照带双引号处理,其实代码也就是稍微改动一下,就是感觉有点坑
//你可以通过自测按钮,看看电脑到底是要求什么输入和输出的
//算法思路:1、首先将读入的字符串按照+、-拆分开,这样就得到了字数,当然数字是以字符串形式存储的,后面转换成数字即可
//2、然后遍历该字符串,找到那些符号,也就只有加号和减号,分两种情况讨论即可。
//3、这里值得注意的是,开头是减号或者开头是数字,我分成了两种情况讨论。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str2 = input.nextLine();
int count = 0;
//开头如果是减号,求出count
if(str2.charAt(0) == '-') {
//碰到+、*、|、\分割时需要在前面加\\或者用中括号[]包起来。碰到双引号就有\
String[] str3 = str2.split("\\+|-");
//因为是第一个数字,这里单独处理,后面的数字根据符号依次加上或者减去即可
count -= Integer.parseInt(str3[1]);
int k = 2;
for(int i=2; i<str2.length(); i++) {
if(str2.charAt(i) == '+') {
count += Integer.parseInt(str3[k]);
k++;
}
if(str2.charAt(i) == '-') {
count -= Integer.parseInt(str3[k]);
k++;
}
}
}
//开头如果是数字,求出count
if(str2.charAt(0) != '-') {
String[] str3 = str2.split("\\+|-");
count += Integer.parseInt(str3[0]);
int k = 1;
for(int i=1; i<str2.length(); i++) {
if(str2.charAt(i) == '+') {
count += Integer.parseInt(str3[k]);
k++;
}
if(str2.charAt(i) == '-') {
count -= Integer.parseInt(str3[k]);
k++;
}
}
}
System.out.println(count);
}
}