المقال الاصلي بكتابة Thanoshan MV

تمت الترجمة بواسطة Ahmed Mohamed

الكائن (object) من النوع string يٌمثل على شكل سلسة من الحروف المتتالية يطلق عليها "String".

إذا كنت قد سبق لك وقمت بعمل برنامج باستخدام جافا (Java Swing) فإن من عناصرها التي تُستخدم فى رسم واجهة المستخدم (GUI) هي JTextField و JTextArea ،وهذه العناصر عند إدخال القيم بها فإنها تقبل قيم نصية من النوع String فقط.

إذا أردنا عمل آلة حاسبة بسيطة باستخدام Swing فإننا بحاجه إلى معرفة كيفية تحويل هذه القيم النصية من النوع String إلى ارقام (Integer) وهذا يؤدي بنا إلى سؤال و هو كيف يمكننا تحويل هذه القيم النصية إلى ارقام؟

فى جافا، يمكننا استخدام Integer.valueOf() و Integer.parseInt() للتحويل من القيم النصية إلى ارقام.

1. استخدام Integer.parseInt() للتحويل من القيمة النصية إلى ارقام

هذه الدالة تقوم بإرجاع القيم النصية إلى نوع رقمي primitive type int إذا كانت القيمة النصية لا تحتوي علي قيمة رقمية صحيحة سيؤدي ذلك إلي حدوث خطأ وهذا الخطأ من نوع NumberFormatException.

ولذلك فى أي وقت نقوم بعملية التحويل هذه يجب علينا التأكد من أننا نقوم بها بالشكل الصحيح وذلك عن طريق استخدام try-catch block وكتابة هذا الجزء بداخلها.

وهذا مثال لعميلة التحويل من قيمة نصية (String) إلي رقم وذلك باستخدام Integer.parseInt():

        String str = "25";
        try{
            int number = Integer.parseInt(str);
            System.out.println(number); // الخرج = 25
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }

وعند إدخال قيمة نصية غير صحيحة نريد تحويلها إلى قيمة رقمية:

     	String str = "25T";
        try{
            int number = Integer.parseInt(str);
            System.out.println(number);
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }

فى الكود السابق نقوم بتحويل القيمة النصية 25T إلي قيمة رقمية. وكما نرى هذه قيمة غير صحيحة وغير قابلة للتحويل ؛لذلك فإن هذا الكود سوف يؤدي إلى حدوث خطأ من النوع NumberFormatException.

وسوف تكون نتيجة الكود السابق كالآتي:

java.lang.NumberFormatException: For input string: "25T"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.parseInt(Integer.java:615)
	at OOP.StringTest.main(StringTest.java:51)

لنري كيف يمكننا تحويل القيم النصية إلى رقم باستخدام دالة Integer.valueOf()
.

2. استخدام دالة Integer.valueOf() للتحويل من القيم النصية إلى رقم

هذه الدالة تقوم بارجاع القيمة النصية المدخلة إلى integer object. اذا قمت بالنظر فى مستندات جافا
الدالة Integer.valueOf()، تقوم بإرجاع كائن من النوع Integer والتى هي مكافئة لـ new Integer(Integer.parseInt(s)).

سوف نقوم بوضع الكود داخل try-catch block عند استخدام هذه الدالة ولنرى هذا المثال باستخدام دالة Integer.valueOf():

        String str = "25";
        try{
            Integer number = Integer.valueOf(str);
            System.out.println(number); // الخرج = 25
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }

لنقوم بوضع قيمة غير صحيحة فى الكود:

        String str = "25TA";
        try{
            Integer number = Integer.valueOf(str);
            System.out.println(number); 
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }

سوف يحدث نفس الخطأ الذى حدث فى المثال السابق.

و هذه هي نتيجة الكود السابق:

java.lang.NumberFormatException: For input string: "25TA"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.valueOf(Integer.java:766)
	at OOP.StringTest.main(StringTest.java:42)

يمكننا إنشاء دالة للتحقق إذا كانت القيمة النصية المدخلة رقمية أم لا وذلك قبل استخدام الدوال المذكورة فى الأعلى.

لقد قمت بإنشاء دالة بسيطة للتحقق إذا كانت القيمة المدخلة رقمية أم لا.

public class StringTest {
    public static void main(String[] args) {
        String str = "25";
        String str1 = "25.06";
        System.out.println(isNumeric(str));
        System.out.println(isNumeric(str1));
    }

    private static boolean isNumeric(String str){
        return str != null && str.matches("[0-9.]+");
    }
}

النتيجة هي:

true
true

الدالة isNumeric() يمرر إليها القيمة النصية. أول شيء تقوم بالتحقق من هذه القيمة إذا كانت null أم لا. بعد ذلك نستخدم دالة matches() للتحقق إذا كانت تحتوي على رقم من 0 إلى 9 مرة أو أكثر.

هذه طريقة سهلة للتحقق من القيم الرقمية. يمكنك كتابة أو البحث فى جوجل علي استخدمات متقدمة لـ regular expressions لاستخلاص القيم الرقمية اعتماداً على الحالة التى تريد أن تستخدمها فيها.

وإنه يفضل أن تقوم بالتحقق من القيمة النصية المارة رقمية أم لا قبل تحويلها إلى رقم.

شكرا لقرائتك.