Методите, които връщат булева стойност, най-често започват с думата „е“ и означават проверка дали проверяваният елемент отговаря на определено 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'са цифри с пълна ширина
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.
GO TO FULL VERSION