English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا البرنامج، ستعلم طرقًا مختلفة لتحقق من أن النص هو عدد في Java.
public class Numeric { public static void main(String[] args) { String string = "12345.15"; boolean numeric = true; try { Double num = Double.parseDouble(string); } catch (NumberFormatException e) { numeric = false; } if(numeric) System.out.println(string + " هو رقم"); else System.out.println(string + " ليس رقم"); } }
عند تشغيل البرنامج، الناتج يكون:
12345.15 هو عدد
في البرنامج أعلاه، لدينا نص string يحتوي على النص الذي نريد التحقق منه. ونحن أيضًا نملك قيمة بولية numeric تُخزن النتيجة النهائية إذا كانت قيمة.
للتحقق من أن النص يحتوي فقط على أرقام، نستخدم في try block طريقة parseDouble() من Double لتحويل النص إلى Double
إذا تم رمي الخطأ (أي خطأ NumberFormatException)، فإن ذلك يعني أن string ليس عددًا، ويتم تعيين numeric إلى false. وإلا، فإن ذلك يعني أنه عدد.
لكن، إذا كنت بحاجة إلى التحقق من عدة نصوص،则需要 تغييرها إلى دالة. وإذا كانت اللógica تعتمد على رمي الاستثناء، فإن ذلك قد يكون مكلفًا جدًا.
على العكس من ذلك، يمكننا استخدام وظائف تعبيرات النصية للتحقق من أن النص هو عدد، كما هو موضح أدناه.
public class Numeric { public static void main(String[] args) { String string = "-1234.15"; boolean numeric = true; numeric = string.matches("-?\\d+(\\.\\d+)?"); if(numeric) System.out.println(string + " هو رقم"); else System.out.println(string + " ليس رقم"); } }
عند تشغيل البرنامج، الناتج يكون:
-1234.15 هو رقم
في البرنامج أعلاه، نستخدم regex للتحقق من أن النص هو رقم بدلاً من استخدام مكتبة try-catch. هذا يتم باستخدام دالة matches() من String.
في دالة matches()
-? يسمح بوجود صفر أو أكثر من '-' لرقم سالب في النص
\\d+ التحقق من أن النص يحتوي على عدد واحد أو أكثر من الأرقام (\\d)
(\\.\\d+)? يسمح بوجود صفر أو أكثر من النمط المحدد (\\.\\d+)
\\. التحقق من أن النص يحتوي على. (نقطة عشرية)
إذاً، يجب أن يكون هناك على الأقل رقم واحد أو أكثر \\d+.