مقدمة: لماذا يعاني حتى مطورو Java ذوو الخبرة من هذا السؤال؟
إذا كنت قد بحثت يومًا عن "How do I convert a String to an int in Java?"، فأنت لست وحدك. هذا أحد أكثر الأسئلة شيوعًا على Stack Overflow بملايين المشاهدات. قد يبدو الأمر بسيطًا: خذ سلسلة نصية، حولها إلى رقم، وانتهى الأمر. ولكن من الناحية العملية، تحويل String إلى int في Java يحمل في طياته بعض المزالق: من استثناءات غير متوقعة إلى الاختيار بين الأداء وسهولة قراءة الكود.
في هذه المقالة، سنستعرض جميع الطرق الشائعة لتحويل سلسلة نصية إلى رقم في Java، ونقارنها من حيث السرعة والأمان وسهولة الاستخدام. ستتعلم كيفية تجنب الخطأ الكلاسيكي NumberFormatException، وستحصل على حلول جاهزة للمشاريع الحقيقية. هيا بنا!
الطريقة رقم 1: الكلاسيكية — Integer.parseInt()
الطريقة الأكثر شيوعًا وسرعة لتحويل String إلى int في Java هي استخدام الطريقة الثابتة Integer.parseInt(). تأخذ سلسلة نصية وتعيد النوع البدائي int.
public class ParseIntExample { public static void main(String[] args) { String number = "42"; int result = Integer.parseInt(number); System.out.println(result); // الإخراج: 42 }}مزايا Integer.parseInt():
- أقصى أداء — لا ينشئ كائنات إضافية.
- البساطة — سطر واحد من الكود بدون أغلفة إضافية.
- دعم أنظمة الأعداد — يمكنك تحديد الأساس (radix):
Integer.parseInt("ff", 16)سيعيد 255.
العيوب والمزالق:
- إذا كانت السلسلة تحتوي على أحرف غير رقمية (مسافات، حروف)، يتم إلقاء NumberFormatException.
- لا يعالج
null— سيحدثNullPointerException.
// مثال على خطأ:String badInput = "42abc";int value = Integer.parseInt(badInput); // NumberFormatException!الطريقة رقم 2: الآمنة Integer.valueOf()
الطريقة الشائعة الثانية لتحويل سلسلة نصية إلى رقم في Java هي Integer.valueOf(). ظاهريًا، تشبه parseInt()، لكنها تعيد كائن Integer وليس النوع البدائي.
public class ValueOfExample { public static void main(String[] args) { String number = "123"; Integer result = Integer.valueOf(number); System.out.println(result); // الإخراج: 123 }}متى تستخدم valueOf()؟
- إذا كنت بحاجة إلى كائن
Integerللمجموعات (مثلList<Integer>). - إذا كنت تعمل مع
Optionalأو Stream API (انظر أدناه). - بفضل التخزين المؤقت (للأرقام من -128 إلى 127)، قد تكون
valueOf()أسرع منparseInt()+ التعبئة التلقائية.
ملاحظة مهمة:
إذا كنت بحاجة إلى النوع البدائي int، فمن الأفضل استخدام parseInt() — فهو أسرع بنسبة ~10-15% لأنه لا ينشئ كائنًا غلافيًا. لكن في 99% من التطبيقات، هذا الفرق غير ملحوظ.
الطريقة رقم 3: Java 8+ و Optional — معالجة أنيقة للأخطاء
النهج الحديث لتحويل String إلى int في Java هو استخدام Optional. يسمح بتجنب كتل try-catch وجعل الكود أنظف.
import java.util.Optional;
public class OptionalParseExample { public static Optional<Integer> safeParseInt(String str) { try { return Optional.of(Integer.parseInt(str)); } catch (NumberFormatException e) { return Optional.empty(); } }
public static void main(String[] args) { // تحليل ناجح safeParseInt("100").ifPresent(System.out::println); // 100