返回布爾值的方法通常以單詞“is”開頭,意思是檢查被檢查的元素是否符合特定條件。我們將在本文中討論的 Character.isDigit() 方法確定指定的 char 值是否為 數字

Java isDigit 方法語法

java.lang.Character.isDigit(char ch)是Java內置的判斷指定字符是否為數字的方法。“一個數字”在 Java 編程上下文中是什麼意思?根據 Java Doc 中的定義,如果Character.getType(ch)方法返回DECIMAL_DIGIT_NUMBER常量,那麼該字符就是一個數字。下面是一些包含數字的 Unicode 字符範圍:
  • 從 '\u0030' 到 '\u0039' 是 ISO-LATIN-1 數字('0' 到 '9')

  • 從 '\u0660' 到 '\u0669' 是阿拉伯-印度數字

  • 從 '\u06F0' 到 '\u06F9' 是擴展的阿拉伯-印度數字

  • 從 '\u0966' 到 '\u096F' 是梵文數字

  • 從 \uFF10' 到 '\uFF19' 是全角數字

還有一些其他範圍包含數字。但是,大多數情況下我們會使用從“\u0030”到“\u0039”的數字。Character.isDigit()的語法在這裡:

public static boolean isDigit(char myChar)
其中myChar是要測試的字符。如果字符是數字,則此方法返回true ,否則返回false。根據 Java 文檔isDigit(char myChar)方法無法處理增補字符。要支持所有 Unicode 字符,包括增補字符,程序員應使用 isDigit (int)方法。它看起來是一樣的,但是,由於 OOP 和多態性支持,工作方式有點不同。 public static boolean isDigit(int codePoint)確定指定字符(Unicode 代碼點)是否為數字。在字符編碼術語中,代碼點或代碼位置是對應於特定字符的數值。如果字符是數字,isDigit(int codePoint)也返回true ,否則返回false

Java isDigit方法簡單示例

讓我們嘗試使用 Java Characher.isDigit()方法。首先,我們將編寫一個簡單的程序來演示該方法。

public class isDigitTest {
//isDigit(char ch) simple example
   public static void main(String[] args)
   {

       //characters to check using isDigit Java method
       char myChar1 = '5', myChar2 = 'u', myChar3 = '0';

       // Function to check if the character
       // is digit or not, using isDigit() method
       System.out.println("is char " + myChar1 + " a digit? "
                       + Character.isDigit(myChar1));
       System.out.println(
               "is char " + myChar2 + " a digit? "
                       + Character.isDigit(myChar2));

       System.out.println(
               "is char " + myChar3 + " a digit? "
                       + Character.isDigit(myChar3));
   }
}
輸出是:
char 5 是數字嗎?true 是 char ua 數字嗎?false 是 char ua 數字嗎?真的

Java isDigit 方法,稍微複雜一點的例子

讓我們嘗試使用Character.isDigit()在一個更有趣和現實生活中的問題中。有一種壓縮方法稱為遊程編碼,簡稱RLE。遊程編碼是一種數據壓縮算法,它用一個字符及其重複次數代替重複的字符(系列)。系列是由幾個相同字符組成的序列。編碼(打包、壓縮)時,組成一系列的相同字符的字符串被包含重複字符本身及其重複次數的字符串替換。因此,如果您有一個字符串“hhhhhorrribleeee”,運行長度編碼會給出一個結果:h5or3ible5。如果你解碼字符串,你應該依次檢查你是否有數字或非數字字符,如果你有數字,是時候獲取數字是什麼了。順便說一句,你們都知道 JPEG 文件。此格式在量化數據上以對角線模式使用遊程長度編碼的變體。變體是僅編碼零值遊程的長度,而所有其他值都編碼為它們本身。在下面的示例中,我們使用Character.isDigit(char ch)方法解碼使用遊程編碼編碼的字符串。如果您有興趣,請嘗試完成該程序,或者更確切地說,創建它的第一部分並編寫一個方法來對字符串進行 RLE 編碼,以及從文件中讀取字符串。或者在檢查輸入的正確性時從控制台手動輸入字符串。下面是一個 RLE 解碼的例子:

public class RleTest {

   //the method to decode String using run-length encoding and 
//isDigit() method 
   private static String decodeRle(String encoded) {
       if (encoded.isBlank()) return "";
       StringBuilder result = new StringBuilder();
       int count = 0;
       char baseChar = encoded.charAt(0);
       for (int i = 1; i <= encoded.length(); i++) {
           char c = i == encoded.length() ? '$' : encoded.charAt(i);
//checking using isDigit() method           
if (Character.isDigit(c)) {
               count = count * 10 + Character.digit(c, 10);
           } else {
               do {
                   result.append(baseChar);
                   count--;
               } while (count > 0);
               count = 0;
               baseChar = c;
           }
       }
       return result.toString();
   }
   
public static void main(String[] args) {
//here we are going to decode an RLE-encoded string 
       System.out.println(decodeRle("C3ecddf8"));
   }
}
輸出是:
CCCccddffffffff
您可能已經註意到我們沒有使用String,而是StringBuilder。為什麼?事實上,String是不可變的,我們遞增計數器,每次都會創建一個新的字符串。我們在程序中也使用了Character.digit方法。java.lang.Character.digit()是返回字符ch在指定數係中的數值的方法。如果基數不在 MIN_RADIX <= base <= MAX_RADIX 範圍內,或者如果ch不是指定基數中的有效數字,則該方法返回 -1。