如题,我想按照姓名笔划将中文姓名依次在网页上列出来,有没有什么好建议啊,现在用的开发环境是JSP+MySQL。先在这里谢谢了!!!

解决方案 »

  1.   

    Java中使用Unicode来表示字符,Unicode里的中文是按部首+笔画排序的.
      

  2.   

    Java中文排序完美新解 
      

  3.   

    对于笔画排序,我们需要计算每个汉字的笔画数。最容易想到的方法就是建立汉字和笔画的映射表。方法和3.1中扩展规则的方法相同。如下:l            用java程序生成一个文本文件(Chinese.csv)。包括所有的从U9FA6-U9FBF的字符的编码和文字。利用excel的按笔画排序功能,对Chinese.csv文件中的内容排序。l            编写Java程序分析Chinese.csv文件,求得笔画数, 生成ChineseStroke.csv。矫正笔画数,重新按汉字的Unicode编码对ChineseStroke.csv文件排序。l            只保留ChineseStroke.csv文件的最后一列,生成Stroke.csv。代码试例:public class StrokeComparator implements Comparator {     public int compare(Object o1, Object o2) {        //Auto-generated method stub        int codepoint1 = 0;        int codepoint2 = 0;        String key1 = o1.toString();        String key2 = o2.toString();        for(int i=0;i<key1.length() && i<key2.length();i++){            codepoint1 = key1.codePointAt(i);            codepoint2 = key2.codePointAt(i);            if(codepoint1 == codepoint2){                continue;            }                       if(Chinese.stroke(codepoint1)<0 || Chinese.stroke(codepoint2)<0){                return codepoint1 - codepoint2;            }                       if(codepoint1 != codepoint2){                return Chinese.stroke(codepoint1) - Chinese.stroke(codepoint2);            }        }        return key1.length()-key2.length();    }}生成笔画           Scanner in = new Scanner(new File("c://Chinese.csv"));                  PrintWriter out = new PrintWriter("c://ChineseStroke.csv");            String oldLine = "999999";            int stroke = 0;            while (in.hasNextLine()) {                String line = in.nextLine();                if (line.compareTo(oldLine) < 0) {                    stroke++;                              }                oldLine = line;                out.println(line + "," + stroke);                      }            out.flush();            out.close();        in.close();
      

  4.   

    非也,虽然Unicode中文排序和笔画有关,但不是传统意义的“姓名笔划顺序”,即笔画数、笔画。Unicode是按照部首排序比如“一”“乙”“丁”,按照“姓名笔划顺序”,应当是一笔的“一”“乙”,在“丁”之前,但是Unicode,“乙”在“丁”,甚至在“丝”之后。开始的都属于“一”字部    for (int i = 0; i < 30; i++) {
          System.out.printf("%d %c%n", '一' + i, (char) ('一' + i));
        }
        System.out.printf("%d %c%n", (int) '乙', '乙');19968 一
    19969 丁
    19970 丂
    19971 七
    19972 丄
    19973 丅
    19974 丆
    19975 万
    19976 丈
    19977 三
    19978 上
    19979 下
    19980 丌
    19981 不
    19982 与
    19983 丏
    19984 丐
    19985 丑
    19986 丒
    19987 专
    19988 且
    19989 丕
    19990 世
    19991 丗
    19992 丘
    19993 丙
    19994 业
    19995 丛
    19996 东
    19997 丝
    20057 乙
      

  5.   

    而GB系列(GB2312,GBK等)按照拼音排序,BIG倒是按照笔画排序,可惜只支持繁体字。    byte[] bytes = "一".getBytes("gb2312");
        for (int i = 0; i < 10; i++) {
          System.out.println(new String(bytes, "gb2312"));
          bytes[1]++;
        }
        byte[] bytes = "一".getBytes("big5");
        for (int i = 0; i < 10; i++) {
          System.out.println(new String(bytes, "big5"));
          bytes[1]++;
        }
      

  6.   

    gb系列,按照拼音排序    byte[] bytes = "一".getBytes("gb2312");
        for (int i = 0; i < 10; i++) {
          System.out.println(new String(bytes, "gb2312"));
          bytes[1]++;
        }big5,按照笔画顺序,可惜不支持简体字    byte[] bytes = "一".getBytes("big5");
        for (int i = 0; i < 10; i++) {
          System.out.println(new String(bytes, "big5"));
          bytes[1]++;
        }
      

  7.   

    http://www.blogjava.net/jeff-lau/archive/2007/12/21/169257.html
      

  8.   

    我原来上传过一个 Unicode 中 20902 个汉字笔画排序,有兴趣的话可以去看看:http://download.csdn.net/detail/bao110908/363125这个表是专业级别的,用于辞书编制索引用的,原来做老本行带回来的。