有更好的方法吗?
/* Compares two characters.
If ch1 is alphabetically smaller than ch2, return true
If ch1 is equal to ch2 or is alphabetically greater, return false
*/
public static boolean smallestCharacter(char ch1, char ch2) {
return Character.parseChar((new String(ch1)).toLowerCase()) <
Character.parseChar((new String(ch2)).toLowerCase())
}
更新:可以假设ch1和ch2都是英文字母中的字符。如果您有类似的问题,但不能假设ch2和ch2是英文字符,我建议阅读@Tedd Hopp的答案。
答案 0 :(得分:12)
怎么样
return Character.toLowerCase(ch1) < Character.toLowerCase(ch2);
答案 1 :(得分:4)
对于英语(以及许多其他语言),您可以使用Character.toLowerCase作为@aleph_null建议。这会根据(小写)Unicode代码点比较字符。但是,对于某些语言来说,这是错误的。 (例如,在德语中,ß - eszett介于's'和't'之间。但是,它的Unicode值是U + 00DF,这将使它在'z'之后。)
比较两个字符的唯一方法是参考一个语言环境。一种方法是使用Collator:
/**
* Compares two characters, ignoring all but primary differences. (Case
* is a tertiary difference.)
* @return true if ch1 is alphabetically smaller than ch2; false otherwise
*/
public static boolean smallestCharacter(char ch1, char ch2, Locale locale) {
Collator collator = Collator.getInstance(locale);
collator.setStrength(Collator.PRIMARY); // Collator.SECONDARY would work
return 0 > collator.compare(Character.toString(ch1),
Character.toString(ch2)
);
}
(P.S。,new String(ch1)
不是创建包含给定char值的String对象的方法。)
答案 2 :(得分:1)
不要为每个字符创建String对象。
你可以使用简单的Character.toLowerCase(char)
之后你的比较方法是:
public boolean smallestCharacter(char a, char b){
return Character.toLowerCase(a) < Character.toLowerCase(b)
}
答案 3 :(得分:-1)
怎么样:
public static boolean smallestCharacter(char ch1, char ch2) {
if (ch1 > 0x60) ch1 -= 0x20;
if (ch2 > 0x60) ch2 -= 0x20;
return ch1 < ch2;
}