java实现Unicode编码和解码
代码:
public class Test {
public static void main(String[] args) {
System.out.println("在站长工具网站中对“中国加油”进行Unicode编码,结果如下:\\u4e2d\\u56fd\\u52a0\\u6cb9");
// 我们使用“中国加油”的Unicode编码来测试
String str = "\\u4e2d\\u56fd\\u52a0\\u6cb9";
// 解码方法1:
String a = unicodeToString1(str);
System.out.println("Unicode解码方法1:" + a);
// 解码方法2:
String b = unicodeToString2(str);
// 解码方法:
System.out.println("Unicode解码方法2:" + b);
String c = stringToUnicode("中国加油");
System.out.println("Unicode编码方式:" + c);
}
/*
* unicode编码
*/
public static String stringToUnicode(String str) {
char[] utfBytes = str.toCharArray();
StringBuilder unicodeBytes = new StringBuilder();
for (char utfByte : utfBytes) {
String hexB = Integer.toHexString(utfByte);
if (hexB.length() <= 2) {
hexB = "00" + hexB;
}
unicodeBytes.append("\\u").append(hexB);
}
return unicodeBytes.toString();
}
/*
* unicode解码方式1
*/
public static String unicodeToString1(String str) {
int start = 0;
int end = 0;
StringBuilder buffer = new StringBuilder();
while (start > -1) {
end = str.indexOf("\\u", start + 2);
String charStr = "";
if (end == -1) {
charStr = str.substring(start + 2, str.length());
} else {
charStr = str.substring(start + 2, end);
}
char letter = (char) Integer.parseInt(charStr, 16); // 16进制parse整形字符串。
buffer.append(Character.toString(letter));
start = end;
}
return buffer.toString();
}
/**
* Unicode解码方式2
*/
private static String unicodeToString2(String str) {
Pattern pattern = Pattern.compile("(\\\\u(\\w{4}))");
Matcher matcher = pattern.matcher(str);
char ch;
while (matcher.find()) {
// 本行为核心代码,处理当前的unicode后4位变为16进制,在转换为对应的char中文字符
ch = (char) Integer.parseInt(matcher.group(2), 16);
str = str.replace(matcher.group(1), ch + "");
}
return str;
}
}
结果:
在站长工具网站中对“中国加油”进行Unicode编码,结果如下:\u4e2d\u56fd\u52a0\u6cb9
Unicode解码方法1:中国加油
Unicode解码方法2:中国加油
Unicode编码方式:\u4e2d\u56fd\u52a0\u6cb9
Pattern.compile()和matcher()方法如何理解
代码:
public class Test {
public static void main(String[] args) {
//需要截取的字符串
String splitStr = "[user:name] = select name from user [hell:world]";
// 定义规则
String pattern = "(\\[+)((\\w+)\\:(\\w+))(\\]+)";
// Pattern.compile函数,其中Pattern.CASE_INSENSITIVE代表不区分大小写
Matcher matcher = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE).matcher(splitStr);
// matcher.find()执行一次就会匹配一次,比如第一次匹配到了“[user:name]”,第二次匹配到“[hell:world]”
while (matcher.find()) {
// matcher.group()代表本次根据规则匹配到的所有内容,本次规则是:\\[+\\w+\\:\\w+\\]+
// matcher.group(0)代表本次根据规则匹配到的所有内容,本次规则是:\\[+\\w+\\:\\w+\\]+
// matcher.group(1)代表第1个括号中的规则匹配的内容,本次第1个括号中的规则是:\\[+
// matcher.group(2)代表第2个括号中的规则匹配的内容,本次第2个括号中的规则是:\\w+\\:\\w+
// matcher.group(3)代表第3个括号中的规则匹配的内容,本次第3个括号中的规则是:\\w+
// matcher.group(5)代表第4个括号中的规则匹配的内容,本次第4个括号中的规则是:\\w+
// matcher.group(4)代表第5个括号中的规则匹配的内容,本次第5个括号中的规则是:\\]+
System.out.println(matcher.group()+" "+matcher.group(0) + " " + matcher.group(1) + " " + matcher.group(2) + " " + matcher.group(3) + " " + matcher.group(4) + " " + matcher.group(5));
}
}
}
结果:
[user:name] [user:name] [ user:name user name ]
[hell:world] [hell:world] [ hell:world hell world ]