题解 | #百分号解码-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(""); } } }