删除多余括号java_剔除多余括号

键盘输入一个含有括号的四则运算表达式,可能含有多余的括号,编程整理该表达式,去掉所有多余的括号,原表达式中所有变量和运算符相对位置保持不变,并保持与原表达式等价。

例:输入表达式    应输出表达式

a+(b+c)           a+b+c

(a*b)+c/d          a*b+c/d

a+b/(c-d)         a+b/(c-d)

注意输入a+b时不能输出b+a。

表达式以字符串输入,长度不超过255。输入不要判错。

所有变量为单个小写字母。只是要求去掉所有多余括号,不要求对表达式化简。

程序如下:

public class PrintString{

private static boolean before = false;

private static void printString(String str){

String temp = "";

for(int i = 0; i < str.length();i++){

if(i == 0){

before = false;

}

else{

if((str.charAt(i - 1) == '*') || (str.charAt(i - 1) == '/')){

before = true;

}else{

before = false;

}

}

if(str.charAt(i) == '('){

temp = getString(str.substring(i));

if(i == 0){

str = temp;

}else{

str = str.substring(0, i) + temp;

}

}

}

System.out.println(str);

}

private static String getString(String str){

String result = str;

String temp = "";

int i = 0;

int itemp = 0;

int len = 0;

boolean add*** = false;

for(i = 1; i < str.length(); ){

if((str.charAt(i) == '+') || (str.charAt(i) == '-')){

add*** = true;

}

if(str.charAt(i) == '(')

{

temp = getString(str.substring(i));

len = temp.length() + str.substring(0, i).length();

str = str.substring(0, i) + temp;

if(len != result.length()){

if(i > 1){

i--;

}

}else{

i = str.indexOf(")", i) + 1;

}

result = str;

continue;

}

if(str.charAt(i) == ')')

{

break;

}

i++;

}

result = str;

if(before == true){

return result;

}

if(add*** == false){

if( (i + 1) < str.length() ){

str = str.substring(1);

temp = str;

result = str.substring(0, i - 1) + temp.substring(i);

} else if((i + 1) == str.length()){

str = str.substring(1);

temp = str;

result = str.substring(0, i - 1) + temp.substring(i);

}

}else{

if( (i + 1) < str.length() ){

if(( str.charAt(i + 1) != '*' ) && (str.charAt(i + 1) != '/')){

str = str.substring(1);

temp = str;

result = str.substring(0, i - 1) + temp.substring(i);

}

} else if((i + 1) == str.length()){

str = str.substring(1);

temp = str;

result = str.substring(0, i - 1) + temp.substring(i);

}

}

return result;

}

public static void main(String[] args){

String msg1="a+(b+c)";

String msg2="(a*b)+c/d";

String msg3="a+b/(c-d)";

String msg4="((1+2*5)+(2+4)*5)-(3+4)*8+1";

System.out.println("input:");

System.out.println(msg1);

System.out.println(msg2);

System.out.println(msg3);

System.out.println(msg4);

System.out.println("output:");

printString(msg1);

printString(msg2);

printString(msg3);

printString(msg4);

}

}

结果如下:

input:

a+(b+c)

(a*b)+c/d

a+b/(c-d)

((1+2*5)+(2+4)*5)-(3+4)*8+1

output:

a+b+c

a*b+c/d

a+b/c-d

1+2*5+(2+4)*5-(3+4)*8+1

最后修改于 2006-08-04 10:15

阅读(?)评论(0)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值