Методите, които връщат булева стойност, най-често започват с думата „е“ и означават проверка дали проверяваният елемент отговаря на определено condition. Методът Character.isDigit() , който ще обсъдим в тази статия, определя дали указаната стойност на char е цифра.

Синтаксис на метода на Java isDigit

java.lang.Character.isDigit(char ch) е вграден метод в Java, който определя дали посоченият знак е цифра or не. Какво означава „цифра“ в контекста на програмиране на 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 в противен случай. Според documentа на Java методът isDigit(char myChar) не може да обработва допълнителни знаци. За да поддържа всички Unicode знаци, включително допълнителни знаци, програмистът трябва да използва метода isDigit(int) . Изглежда по същия начин, но благодарение на ООП и поддръжката на полиморфизма работи малко по-различно. public static boolean isDigit(int codePoint) определя дали посоченият знак (codeова точка Unicode) е цифра. В терминологията за codeиране на знаци, codeова точка or codeова позиция е числова стойност, която съответства на конкретен знак.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 цифра ли е? вярно ли е char ua цифра? false е char u цифра? вярно

Java isDigit метод, малко по-сложен пример

Нека се опитаме да използваме Character.isDigit()в по-интересен и реален житейски проблем. Има метод за компресиране, наречен Run Length Encoding or накратко RLE. Run Length Encoding е алгоритъм за компресиране на данни, който заменя повтарящите се знаци (серии) с един знак и броя на неговите повторения. Серия е поредица, състояща се от няколко еднакви знака. При codeиране (опаковане, компресиране) низ от идентични знаци, които съставляват поредица, се заменя с низ, съдържащ самия повтарящ се знак и броя на неговите повторения. Така че, ако имате низ „hhhhhorrribleeee“, codeирането на дължина на изпълнение дава резултат: h5or3ible5. Ако деcodeирате низа, трябва последователно да проверите дали имате цифрен or нецифрен знак и ако имате цифра, време е да разберете Howва е цифрата. Между другото, всички знаете JPEG файлове. Този формат използва вариант на codeиране по дължина в диагонален модел върху квантувани данни. Вариантът е, че само дължината на сериите от нулеви стойности се codeира, а всички останали стойности се codeират като самите тях. В примера по-долу използвамеМетод Character.isDigit(char ch) за деcodeиране на низ, codeиран с Run-length codeиране. Ако се интересувате, опитайте да завършите програмата or по-скоро създайте нейната първа част и напишете метод за RLE codeиране на низ, Howто и четене на низ от файл. Или ръчно въвеждане на низ от конзолата, докато проверявате коректността на въвеждането. Ето пример за RLE деcodeиране:

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"));
   }
}
Резултатът е:
CCCecddffffffff
Може би сте забелязали, че не използваме String , а StringBuilder . Защо? Факт е, че String е неизменен и ние увеличаваме брояча и всеки път ще се създава нов низ. Използвахме и метода Character.digit в програмата. java.lang.Character.digit() е метод, който връща числовата стойност на знака ch в определената бройна система. Ако основата не е в диапазона MIN_RADIX <= база <= MAX_RADIX or ако ch не е валидна цифра в указаната база, методът връща -1.