package util;

public class EscapeUnescape {
public static String escape(String src) {
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6);
for (i = 0; i < src.length(); i++) {
j = src.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j)
|| Character.isUpperCase(j))
tmp.append(j);
else if (j < 256) {
tmp.append("%");
if (j < 16)
tmp.append("0");
tmp.append(Integer.toString(j, 16));
} else {
tmp.append("%u");
tmp.append(Integer.toString(j, 16));
}
}
return tmp.toString();
} public static String unescape(String src) {
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0, pos = 0;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf("%", lastPos);
if (pos == lastPos) {
if (src.charAt(pos + 1) == 'u') {
ch = (char) Integer.parseInt(src
.substring(pos + 2, pos + 6), 16);
tmp.append(ch);
lastPos = pos + 6;
} else {
ch = (char) Integer.parseInt(src
.substring(pos + 1, pos + 3), 16);
tmp.append(ch);
lastPos = pos + 3;
}
} else {
if (pos == -1) {
tmp.append(src.substring(lastPos));
lastPos = src.length();
} else {
tmp.append(src.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
} public static void main(String[] args) {
String tmp = "~!@#$%^&*()_+|\\=-,./?><;'][{}\"";
System.out.println("testing escape : " + tmp);
tmp = escape(tmp);
System.out.println(tmp);
System.out.println("testing unescape :" + tmp);
System.out.println(unescape(tmp));
}
}

  貌似有问题 待改进

最新文章

  1. noip2016十连测round3
  2. OC的类别(分类)和拓展
  3. 动态链接库(VC_Win32)
  4. 【转+分析】JAVA: 为什么要使用&quot;抽象类&quot;? 使用&quot;抽象类&quot;有什么好处?
  5. Android(java)学习笔记71:生产者和消费者之等待唤醒机制
  6. [转]Flex 布局教程:语法篇
  7. .NET中lock的使用方法及注意事项
  8. hdu 5997 rausen loves cakes(线段数合并+启发式修改)
  9. SpringMVC结合ajaxfileupload文件无刷新上传
  10. JUnit 3.8.1 源码学习
  11. java排序算法(六):直接插入排序
  12. CNN的反向传播
  13. 18.Odoo产品分析 (二) – 商业板块(10) – 电子商务(2)
  14. sqrt()函数对素数判断的优化
  15. [LeetCode] 747. Largest Number At Least Twice of Others_Easy
  16. ★★★kalinux 常用命令
  17. Sed&amp;awk笔记之sed篇(转)
  18. SpringBoot(九)_springboot集成 MyBatis
  19. 【Alpha】总结 - (待更)
  20. ES6 简介

热门文章

  1. js输出单一字符字串
  2. 【python】原始字符创
  3. UltraEdit软件破解方法
  4. 到底该如何入门Keras、Theano呢?(浅谈)
  5. 写个简单的ANT脚本来编译项目
  6. MVC自学系列之三(MVC视图-Views)
  7. 用PYTHON输入输出字符串
  8. QT获得所有系统环境变量(包括Linux和MAC的信息)
  9. lemon OA 下阶段工作安排
  10. Google Map API 代码示例