我遇到了一个问题,我认为这是将char与数字进行比较。
String FindCountry = "BB";
Map<String, String> Cont = new HashMap <> ();
Cont.put("BA-BE", "Angola");
Cont.put("9X-92", "Trinidad & Tobago");
for ( String key : Cont.keySet()) {
if (key.charAt(0) == FindCountry.charAt(0) && FindCountry.charAt(1) >= key.charAt(1) && FindCountry.charAt(1) <= key.charAt(4)) {
System.out.println("Country: "+ Cont.get(key));
}
}
在这种情况下,代码显示“安哥拉”,但如果显示
String FindCountry = "9Z"
它不打印任何内容。我不确定问题是否在于无法比较“ Z”比“ 2”大。在该示例中,我只有两个Cont.put(),但是在我的文件中,我得到了更多,而且很多不仅包含char。我对他们有问题。
将char与数字进行比较的最聪明,最好的方法是什么?实际上,如果我将“ 1”设置为大于“ Z”,则可以,因为我需要这种更大的方式:A-Z-9-0。
谢谢!
答案 0 :(得分:2)
您可以使用查找“表”,我使用了String
:
private static final String LOOKUP = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
然后将字符与indexOf()
进行比较,但这似乎很杂乱,可能可以更轻松地实现,但我暂时无法提出一些简单的建议:
String FindCountry = "9Z";
Map<String, String> Cont = new HashMap<>();
Cont.put("BA-BE", "Angola");
Cont.put("9X-92", "Trinidad & Tobago");
for (String key : Cont.keySet()) {
if (LOOKUP.indexOf(key.charAt(0)) == LOOKUP.indexOf(FindCountry.charAt(0)) &&
LOOKUP.indexOf(FindCountry.charAt(1)) >= LOOKUP.indexOf(key.charAt(1)) &&
LOOKUP.indexOf(FindCountry.charAt(1)) <= LOOKUP.indexOf(key.charAt(4))) {
System.out.println("Country: " + Cont.get(key));
}
}
答案 1 :(得分:1)
如果仅使用字符A-Z
和0-9
,则可以添加一种转换方法,在这两种转换方法之间将增加0-9
个字符的值,使它们位于{{之后1}}:
A-Z
可以这样使用:
int applyCharOrder(char c){
// If the character is a digit:
if(c < 58){
// Add 43 to put it after the 'Z' in terms of decimal unicode value:
return c + 43;
}
// If it's an uppercase letter instead: simply return it as is
return c;
}
注意:Here is a table with the decimal unicode values.字符if(applyCharOrder(key.charAt(0)) == applyCharOrder(findCountry.charAt(0))
&& applyCharOrder(findCountry.charAt(1)) >= applyCharOrder(key.charAt(1))
&& applyCharOrder(findCountry.charAt(1)) <= applyCharOrder(key.charAt(4))){
System.out.println("Country: "+ cont.get(key));
}
将具有值'0'-'9'
,而48-57
将具有值'A'-'Z'
。因此,65-90
用于检查它是否是数字字符,而< 58
会将+ 43
增加到48-57
,并将其值放在91-100
之上因此您的'A'-'Z'
和<=
支票将按您希望的那样工作。
或者,您可以创建一个查询字符串,并将其索引用于该顺序:
>=
PS:如the first comment by @Stultuske中所述,变量通常位于camelCase中,因此它们不是以大写字母开头。
答案 2 :(得分:-1)
正如其他注释中所述,对字符的这种数学比较操作基于每个字符的实际ASCII值。因此,建议您使用ASCII table作为参考来重构逻辑。