⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hzstrokecomparator.java

📁 按汉字笔划排序
💻 JAVA
字号:
package wfc.service.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.Comparator;
import java.util.HashMap;

import wfc.service.log.Log;

/**
 * 根据汉字笔划的汉字字符串排序器<br>
 * 
 * @author 虞越
 * @version 1.6 <br>
 *          created 2004/11/24
 */

public class HZStrokeComparator implements Comparator<Object> {

	private static HashMap<Character, BigInteger> hm = new HashMap<Character, BigInteger>();

	static {
		InputStream is = HZStrokeComparator.class
				.getResourceAsStream("hz/stroke.txt");
		BufferedReader reader = new BufferedReader(new InputStreamReader(is));
		String line = null;
		try {
			while ((line = reader.readLine()) != null) {
				Character hz = new Character(line.charAt(0));
				BigInteger stroke = new BigInteger(line.substring(2));
				hm.put(hz, stroke);
			}
		} catch (IOException ex) {
			Log.error(ex);
		}
	}

	public HZStrokeComparator() {
	}

	public int compare(Object o1, Object o2) {
		if (o1 == null) {
			if (o2 == null) {
				return 0;
			} else {
				return -1;
			}
		} else if (o2 == null) {
			return 1;
		}
		String thisString = o1.toString();
		String anotherString = o2.toString();
		int len1 = thisString.length();
		int len2 = anotherString.length();
		int lim = Math.min(len1, len2);
		int k = 0;
		while (k < lim) {
			Character ch1 = new Character(thisString.charAt(k));
			Character ch2 = new Character(anotherString.charAt(k));
			BigInteger stroke1 = (BigInteger) hm.get(ch1);
			if (stroke1 == null) {
				stroke1 = new BigInteger("0");
			}
			BigInteger stroke2 = (BigInteger) hm.get(ch2);
			if (stroke2 == null) {
				stroke2 = new BigInteger("0");
			}
			int r = stroke1.compareTo(stroke2);
			if (r != 0) {
				return r;
			}
			k++;
		}
		return len1 - len2;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -