CodeGym /وبلاگ جاوا /Random-FA /روش جاوا isDigit
John Squirrels
مرحله
San Francisco

روش جاوا isDigit

در گروه منتشر شد
روش‌هایی که مقدار بولی را برمی‌گردانند اغلب با کلمه «is» شروع می‌شوند و به معنای بررسی اینکه آیا عنصر مورد بررسی با شرایط خاصی مطابقت دارد یا خیر. متد Character.isDigit() که در این مقاله می خواهیم به آن بپردازیم، تعیین می کند که آیا مقدار char مشخص شده یک رقم است یا خیر.

نحو روش جاوا isDigit

java.lang.Character.isDigit(char ch) یک روش داخلی در جاوا است که تعیین می کند آیا کاراکتر مشخص شده یک رقم است یا خیر. "یک رقم" در زمینه برنامه نویسی جاوا به چه معناست؟ طبق تعریف Java Doc، اگر متد Character.getType(ch) DECIMAL_DIGIT_NUMBER را ثابت برگرداند ، در این صورت کاراکتر یک رقم است. برخی از محدوده‌های کاراکتر یونیکد که حاوی اعداد هستند عبارتند از:
  • از "\u0030" تا "\u0039" ارقام ISO-LATIN-1 هستند ("0" تا "9")

  • از «\u0660» تا «\u0669» ارقام عربی-هندی هستند

  • از «\u06F0» تا «\u06F9» ارقام عربی- هندی بسط داده شده است

  • از '\u0966' تا '\u096F' ارقام Devanagari هستند

  • از \uFF10 تا '\uFF19' ارقام با عرض کامل هستند

همچنین برخی محدوده های دیگر حاوی ارقام وجود دارد. با این حال، اغلب ما قرار است از ارقام «\u0030» تا «\u0039» استفاده کنیم. نحو Character.isDigit() در اینجا است:
public static boolean isDigit(char myChar)
جایی که myChar شخصیتی است که باید آزمایش شود. این روش اگر کاراکتر یک رقم باشد true و در غیر این صورت false بر می گرداند . طبق روش جاوا doc isDigit (char myChar) نمی تواند کاراکترهای تکمیلی را مدیریت کند. برای پشتیبانی از همه کاراکترهای یونیکد، از جمله کاراکترهای تکمیلی، برنامه نویس باید از روش isDigit(int) استفاده کند . به نظر می رسد یکسان است، اما، به لطف OOP و پشتیبانی پلی مورفیسم، کمی متفاوت عمل می کند. عمومی static boolean isDigit(int codePoint) تعیین می کند که آیا کاراکتر مشخص شده (نقطه کد یونیکد) یک رقم است یا خیر. در اصطلاحات رمزگذاری کاراکتر، نقطه کد یا موقعیت کد یک مقدار عددی است که با یک کاراکتر خاص مطابقت دارد. isDigit(int codePoint) نیز اگر کاراکتر یک رقم باشد true و در غیر این صورت false بر می گرداند .

مثال ساده روش جاوا 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));
   }
}
خروجی این است:
آیا کاراکتر 5 رقمی است؟ آیا رقم char ua درست است؟ آیا رقم char ua اشتباه است؟ درست است، واقعی

روش جاوا isDigit، مثال کمی پیچیده تر

بیایید سعی کنیم از Character.isDigit() در یک مسئله جالب تر و واقعی تر استفاده کنیم. یک روش فشرده سازی به نام Run Length Encoding یا به اختصار RLE وجود دارد. Run Length Encoding یک الگوریتم فشرده‌سازی داده است که کاراکترهای تکراری (سری) را با یک کاراکتر و تعداد تکرارهای آن جایگزین می‌کند. سریال مجموعه ای متشکل از چندین شخصیت یکسان است. هنگام رمزگذاری (بسته‌بندی، فشرده‌سازی)، رشته‌ای از کاراکترهای یکسان که یک سری را تشکیل می‌دهند، با رشته‌ای حاوی خود کاراکتر تکرارشونده و تعداد تکرارهای آن جایگزین می‌شود. بنابراین اگر یک رشته "hhhhhorrribleeee" داشته باشید، رمزگذاری طول اجرا نتیجه می دهد: h5or3ible5. اگر رشته را رمزگشایی می کنید، باید به طور متوالی بررسی کنید که آیا یک کاراکتر رقمی دارید یا غیر رقمی، و اگر یک رقم دارید، زمان آن رسیده است که رقم را دریافت کنید. به هر حال، همه شما فایل های JPEG را می شناسید. این قالب از یک نوع رمزگذاری طول اجرا در یک الگوی مورب بر روی داده های کوانتیزه استفاده می کند. نوع آن این است که فقط طول اجرای مقادیر صفر کدگذاری می شود و همه مقادیر دیگر به عنوان خودشان کدگذاری می شوند. در مثال زیر، ما از متد Character.isDigit(char ch) برای رمزگشایی رشته ای که با رمزگذاری Run-length رمزگذاری شده است، استفاده می کنیم. اگر علاقه مند هستید، سعی کنید برنامه را کامل کنید یا بهتر است بگوییم قسمت اول آن را ایجاد کنید و روشی برای رمزگذاری رشته 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"));
   }
}
خروجی این است:
CCCecddffffffff
شاید متوجه شده باشید که ما از یک String استفاده نمی کنیم بلکه از StringBuilder استفاده می کنیم . چرا؟ واقعیت این است که String تغییرناپذیر است و شمارنده را افزایش می دهیم و هر بار یک رشته جدید ایجاد می شود. از متد Character.digit هم در برنامه استفاده کردیم . java.lang.Character.digit() متدی است که مقدار عددی کاراکتر ch را در سیستم عددی مشخص شده برمی گرداند. اگر پایه در محدوده MIN_RADIX <= پایه <= MAX_RADIX نباشد، یا اگر ch یک رقم معتبر در پایه مشخص‌شده نباشد، روش -1 را برمی‌گرداند.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION