确定Java中两个字符的字母顺序

时间:2011-11-12 23:54:28

标签: java

有更好的方法吗?

/* 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的答案。

4 个答案:

答案 0 :(得分:12)

怎么样

return Character.toLowerCase(ch1) < Character.toLowerCase(ch2);

答案 1 :(得分:4)

对于英语(以及许多其他语言),您可以使用Character.toLowerCase作为@aleph_null建议。这会根据(小写)Unicode代码点比较字符。但是,对于某些语言来说,这是错误的。 (例如,在德语中,ß - eszett介于's'和't'之间。但是,它的Unicode值是U + 00DF,这将使它在'z'之后。)

比较两个字符的唯一方法是参考一个语言环境。一种方法是使用Collat​​or:

/**
 * 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;
}