JAVA-替换计算公式中的%
**我们在做计算问题时,会遇到%⽆法处理,往往⼤多数⼈会想到替换为*0.01,但这是错误的,
举例:100/100% 和 100/100*0.01 两个结果显然不同,这时很多⼈就想到了加(),但是考虑到怎么加括号,这⼜是⼀个难题。
这个⼯具类,可以把字符串中的%替换为*0.01并加上括号,但是我们要获取%前⾯⼀个未知数的位数是很困难的,所以我们⽤String 的⽅法可以取得%前最后⼀个运算符下标,然后给这个运算符的右边添加(,给%右边添加),但这只是计算
公式中不存在()的情况,如果存在括号我们就不需要添加括号。下⾯举例:
"1%+(2+3)%+100%+300/((2+(5+2))%+((1+5)+(2+3))%/100)+10%*5+((4+5)+5)%+(3+(2%+3)%)%+100%"
调⽤下⾯这个⽅法得出的结果为:**
具体的实现代码为:
public String stringMath(String string){
// 1.我们应到%的第⼀次出现的位置
int stringIndex = string.indexOf("%",0);
System.out.println("%的第⼀次出现的位置为:"+ stringIndex );
List<Integer> numbers =new ArrayList<>();
// 2.我们应到第⼀次出现%之前的最后⼀个加或减或乘或除的下标
ains("+")){
//PS:string.lastIndexOf("String",int)此⽅法是得到int之前出现的最后⼀个"String"的下标        Integer addition = string.lastIndexOf("+", stringIndex);
numbers.add(addition);
}java replace方法
ains("-")){
Integer subtraction = string.lastIndexOf("-", stringIndex);
numbers.add(subtraction);
}
ains("*")){
Integer multiplication = string.lastIndexOf("*", stringIndex);
numbers.add(multiplication);
}
ains("/")){
Integer division = string.lastIndexOf("/", stringIndex);
numbers.add(division);
}
/
/PS:这⾥我是把得到的未知个下标放到list中,如果list为空,Collections.max(list)会返回-1 //Collections.max(list)在下⾯填加括号时会⽤到
System.out.println("%前最后⼀次出现的运算符位置:"+ Collections.max(numbers));
StringBuilder sb =new StringBuilder(string);
// 3.判断%左边第⼀个下标是否是')',如果有')',那我们就不必添加括号,⽐如:(10+5)%
if(string.charAt(stringIndex -1)==')'){
//PS:这⾥是%左边第⼀个下标是括号,不添加括号的情况
String stringItem = sb.substring(0, stringIndex +1);
System.out.println("截取字符串替换完部分为:"+ stringItem);
String noStringItem = sb.substring(stringIndex +1);
System.out.println("截取字符串未替换部分为:"+ noStringItem);
stringItem = place("%","*0.01");
StringBuilder newString =new StringBuilder(stringItem);
if(noStringItem.length()>0){
newString.append(stringMath(noStringItem));
}
String();
}else{
//PS:这⾥是%左边第⼀个下标不是括号,要添加括号的情况
sb.insert(Collections.max(numbers)+1,"(");
sb.insert(stringIndex +2,")");
String stringItem = sb.substring(0, stringIndex +3);
System.out.println("截取字符串替换完部分为:"+ stringItem);
String noStringItem = sb.substring(stringIndex +3);
System.out.println("截取字符串未替换部分为:"+ noStringItem);
stringItem = place("%","*0.01");
StringBuilder newString =new StringBuilder(stringItem);
if(noStringItem.length()>0){
newString.append(stringMath(noStringItem));
}
String();
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。