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