📄 hzstrokecomparator.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 + -