亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Java中比較字符和數字

如何在Java中比較字符和數字

慕少森 2022-06-04 17:33:50
我遇到了一個問題,我認為這是將字符與數字進行比較。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" 它不打印任何東西。我不確定我認為問題在于它無法比較'2'大于'Z'。在那個例子中,我只有兩個 Cont.put(),但在我的文件中,我得到了更多,而且其中很多不僅僅是字符。我和他們有問題。將 char 與 number 進行比較的最聰明和最好的方法是什么?實際上,如果我設置一個規則,比如“1”大于“Z”,那沒關系,因為我需要這種更大的方式:AZ-9-0。
查看完整描述

3 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

您可以使用查找“表”,我使用了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));

    }

}


查看完整回答
反對 回復 2022-06-04
?
慕森王

TA貢獻1777條經驗 獲得超3個贊

如果您只使用字符A-Zand 0-9,您可以在兩者之間添加一個轉換方法,這將增加0-9字符的值,因此它們將在 之后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;

}

可以這樣使用:


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));

}

在線嘗試。


注意:這是一個包含十進制 unicode 值的表。字符'0'-'9'將具有值48-57并將'A'-'Z'具有值65-90。所以 the< 58用于檢查它是否是一個數字字符,并且 the+ 43將增加48-57to 91-100,將它們的值置于 the 之上,'A'-'Z'這樣你的<=和>=檢查就會按照你的意愿工作。


或者,您可以創建一個查找字符串并將其索引用于訂單:


int applyCharOrder(char c){

  return "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".indexOf(c);

}


PS:正如@Stultuske在第一條評論中提到的,變量通常是駝峰式,所以它們不是以大寫字母開頭。


查看完整回答
反對 回復 2022-06-04
?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

正如評論中的其他人所述,這種對字符的數學比較操作基于每個字符的實際 ASCII 值。所以我建議你使用ASCII 表作為參考來重構你的邏輯。



查看完整回答
反對 回復 2022-06-04
  • 3 回答
  • 0 關注
  • 305 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號