JAVA汉字字符串按拼音排序
目标:实现一个汉字字符串按汉语拼音字典顺序排序。
原理:在windows环境的gbk字符集里,汉字是按汉语拼音字典顺序编码的,如“础”是 B4A1,“储”是B4A2。这里有个问题就像上面的储和础这样的同音字只能遵照编码的顺序了,另外多音字也得遵照编码顺序。设计思路是先拆分汉字字符串为字符数组,获得每个汉字字符的16进制字符串表示,然后比较该字符串的字典顺序大小,排序。需要说明的是,获得汉字字符的字节数组,转换成int比较也可,实现从略。下面是实现的代码:
import java.io.UnsupportedEncodingException;
public class HanZiSort {
public static void main(String[] args) throws UnsupportedEncodingException {
String test = "我爱北京天安门";
System.out.println(sort(test, "gb2312"));
}
public static String sort(String s, String charset) {
char[] c = s.toCharArray();
for (int i = 0; i < c.length - 1; i++) {
for (int j = i + 1; j < c.length; j++) {
if (getHexString(new String(new char[] { c[i] }), charset)
.compareTo(
getHexString(new String(new char[] { c[j] }),
charset)) > 0) {
char temp = c[i];
c[i] = c[j];
c[j] = temp;
}
}
}
return new String(c);
}
public static String getHexString(String s, String charset) {
byte[] b = null;
StringBuffer sb = new StringBuffer();
try {
b = s.getBytes(charset);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
for (int i = 0; i < b.length; i++) {
sb.append(Integer.toHexString(b[i] & 0xFF));
}
return sb.toString();
}
}
打印的结果为:爱安北京门天我
相关文档:
Why NIO ?
http://onjava.com/pub/a/onjava/2002/09/04/nio.html?page=1
Java developers might ask: why introducing a new technology to handle sockets? What's wrong with the Java 1.3.x sockets? Suppose you would like to implement a server accepting diverse client connections. Suppose, as well, that you ......
全局变量:也叫成员变量,是指在类中定义的变量;它在整个类中都有效
全局变量又可分为:类变量和实例变量
1.类变量:又叫静态变量 ......
1. 当某个类中的某个方法中的局部变量的名字与该类中的全局变量的名字相同时 该全局变量将被隐藏;此时 如果想在该方法中使用全局
变量 必须使用关键字(this.全局变量名)
2. 当this关键字出现在类的实例方法中时,代表正在调用该方法的当前对象
3.  ......
虽然不觉得在编程时正确判断java类初始化工作先后顺序会是一个挑战,且对于类初始化的认识还只停留在语言特性机制的层面(或许会是一种实现技巧领域的议题),但对于关于初始化这类零散而又细小的知识点,总结还是有价值的 ......
Java
虚拟机(JVM)是可运行Java
代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。本文首先简要介绍从Java文件的编译到最终执行的过程,随后对JVM规格描述作一说明。
一.Java源文件的编译、下载
、解释和执行
Java应用程序的开发 ......