题解 | #百分号解码-Java使用栈简单解决#
百分号解码
http://www.nowcoder.com/questionTerminal/79c892f6001b49d5a0680716e6f4f14d
思路:
使用一个栈,从后往前遍历字符串:
- 如果不是"%"就压入栈
- 如果是"%"就从栈顶取出两个字符组合成16进制并且转换为ASCII字符
注意: - 16进制字符串转整型ASCII值可以直接使用Java包装类Integer提供的parseInte()方法
- 整型ASCII值转字串常量可以直接强转
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
String s = null;
LinkedList<Character> stack;;
for(int i = 0;i < t;i++) {
stack = new LinkedList<>();
s = sc.next();
for(int j = s.length()-1;j >= 0;j--) {
if(s.charAt(j) != '%') stack.addLast(s.charAt(j));
else {
// 使用Integer提供的进制转换
String hex = new String(""+stack.removeLast()+stack.removeLast());
// 直接强转就可以得到对应的字符
char chr = (char)(Integer.parseInt(hex, 16));
// 如果转换结果得到“%”,就再进行一次
if(chr == '%') j++;
// 将得到的结果放入栈顶
else stack.addLast(chr);
}
}
// 从后往前打印结果
while(!stack.isEmpty()) System.out.print(stack.removeLast());
System.out.println("");
}
}
}
查看20道真题和解析