字符串解码
样例输入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));
}
}