如:
输入字符串:"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); } }