字符串解码

样例输入qw[2|w[1|e]]
样例输出qwwewe

package practice;
import java.util.Scanner;
import java.util.Stack;
/*
 * 解码 
 * 输入格式   [2|w[1|e]]
 *输出格式   wewe
 *w[2|[2|ab]][2|c]
 *wababababcc
 **/
public class practical {
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static StringBuffer compress(StringBuffer s){
		StringBuffer ans=new StringBuffer(); //解码结果
		
		int left=-1;
		int right=-1;
		Stack stack =new Stack();
		for(int i=0;i<s.length();i++){
			if(s.charAt(i)=='[')stack.push(i);
			if(s.charAt(i)==']'){
				left=(int) stack.pop();
				right=i;
				StringBuffer temp=new StringBuffer();//[]子字符串
				temp.append(s.substring(left+1, right));
				//解码之后进行替换
				s.replace(left,  right+1, compress(temp).toString());
				i=compress(temp).toString().length()+left-1;
			}
		}
		if(s.indexOf("|")==-1){ //全部解码之后
			return s;
		}
		//解码
			int i=0;
				//获取重复次数		
				StringBuffer numbers=new StringBuffer();
				while(s.charAt(i)!='|'){
					numbers.append( s.charAt(i));
					i++; 
				}
				i++;
				int ancount=Integer.parseInt(numbers.toString()); 
				//对重复次数进行复制
				for(int num=0;num<ancount;num++){
					ans.append(s.substring(i));
				}
		
				return ans;  //返回解码结果
		

		
	}
	public static void main(String args[]){
		String s=new String();
		StringBuffer stringBuffer=new StringBuffer();
		Scanner input=new Scanner(System.in);
		if(input.hasNext()){
			s=input.next();
		}
		stringBuffer.append(s);
		System.out.println(compress(stringBuffer));
	}
}

posted @ 2019-08-18 17:23  啾啾啾lhd  阅读(337)  评论(0编辑  收藏  举报