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();
}
}
打印的结果为:爱安北京门天我
相关文档:
package com.vista.Server;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels. ......
1.Base64
加密:org.apache.commons.codec.binary.Base64.encodeBase64(byte[] binaryData)
解密:org.apache.commons.codec.binary.Base64.decodeBase64(byte[] base64Data)
2.Md5
加密:org.apache.commons.codec.digest.md5Hex(byte[] data)
解密:无
3.DES(des-ecb,3des,des-cbc,cb ......
JAVA中的主函数是我们再熟悉不过的了,相信每个学习过JAVA语言的人都能够熟练地写出这个程序的入口函数,但对于主函数为什么这么写,其中的每个关键字分别是什么意思,可能就不是所有人都能轻松地答出来的了。我也是在学习中碰到了这个问题,通过在网上搜索资料,并加上自己的实践终于有了一点心得,不敢保留,写出来与大家 ......
package com.word.tools.pool;
import java.util.Vector;
import com.word.po.ObjectPool_Param;
import com.word.po.TyjkXmlPO;
public class TyjkXmlPool
{
/**对象池参数*/
private ObjectPool_Param ob_param;
/**存放对象的Vector*/
......
1.InputStream和OutputStream是用于读或写单个字节或者字节数组,我们很少用到它们的方法,它们之所以存在是因为别的类可以使用它们,以便提供更有用的接口。因此,我们很少使用单一的类来创建流对象,而是通过叠合多个对象来提供所期望的功能。
2.FilterInputStream和FilterOutputStream是用来提供装饰器类接口以控制特定 ......