Java 比較字串或字元是否相等(忽略大小寫)

前言

最近寫著Codeforces或是LeetCode的題目時,很常遇到需要判斷字元(Char)或是字串(String)需要比較是否相等而且需要忽略大小寫的,故記錄下來常見的做法~

解決方法

字串篇 String

方法1 – String 底下的 equalsIgnoreCase()

boolean res = strA.compareToIgnoreCase(strB);

回傳的是 boolean,相同就是true,有異則為false

方法2 – String 底下的 compareToIgnoreCase()

int res = strA.compareToIgnoreCase(strB);

回傳值是一個int,值代表了不同涵義

  • 0: 兩者忽略大小寫的話字串相等
  • 小於0: strA 比 strB 小
  • 大於0: strA 比 strB 大

支援版本 : Java 2 就提供了,故為相當基礎的一個語法,不用擔心相容性問題

使用過的題目範例 : Codeforces 112A Petya 以及字串們

方法3 – 轉成相同大小寫再行比較

boolean res1 = strA.toUpperCase().equals(strB.toUpperCase());
boolean res2 = strA.toUpperCase().equals(strB.toLowerCase());

字元篇 Character

⚠️方法1 – ASCII code

boolean res = Math.abs(charA - charB) == 32 || charA == charB;

這個方法用到ASCII 中英文字母大小寫十進位相差為32的特性

  • Math.abs(charA – charB) == 32 : 一個大寫一個小寫的狀況
  • charA == charB : 大小寫相同的狀況

⚠️ 需注意,使用這個做法必須確認輸入值為 a – Z 的字元,不然就會出現奇怪的狀況

像是: 大寫A的 ASCII 十進位為 65,驚嘆號的ASCII 十進位為 33 ,相差雖然也是32,但他們肯定不相等的對吧!!

方法2 – 轉成相同大小寫再進行比較

boolean res = Character.toLowerCase(charA) == Character.toLowerCase(charB);

簡單又實用

當然…要將Character轉成String然後再用上面的作法也是可以啦… 但就有點繞的感覺


結論

就當作個紀錄,有新的發現就會來更新~

參考資料

🧡希望這篇文章有提供一點幫助~

🧡幫我點一個小小的廣告或留言,都是對我的支持!

⭐如有任何疑問,歡迎透過留言或messenger讓我知道 !

🍽️另外,徵求任何合作機會(不管是業配、廣告或是友站連結)

看看一些其他的筆記吧

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *