قراءة الأسطر
استخدم readLine والحلقات
قراءة الأسطر درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.
الطريقة readLine
تُعد readLine() جوهر BufferedReader. فهي تقرأ المحارف حتى تصل إلى فاصل سطر (Enter)، ثم تعيد السطر على هيئة String.
لا يتضمن النص المُعاد محرف السطر الجديد. في هذا الدرس سنقرأ سطرًا واحدًا وعدة أسطر.
String line = br.readLine();قراءة سطر واحد
إليك أبسط حالة: اقرأ اسمًا واطبع تحية. تحجب readLine() التنفيذ، أي تنتظر، حتى يضغط المستخدم Enter.
ولأنها تقرأ من System.in، يتوقف هذا المقطع مؤقتًا انتظارًا لإدخال لوحة المفاتيح، لذلك لا يمكن تشغيله تلقائيًا هنا.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String name = br.readLine();
System.out.println("Welcome, " + name + "!");
}
}ما الذي تعيده readLine عند النهاية
عندما لا يتبقى إدخال (عند نهاية التدفق أو عندما يشير المستخدم إلى EOF)، تعيد readLine() القيمة null بدلًا من String.
هذه إشارة مهمة جدًا: ففحص null هو الطريقة التي نعرف بها أن علينا إيقاف القراءة.
String line = br.readLine();
if (line == null) {
System.out.println("No more input.");
}القراءة حتى EOF
لقراءة كل سطر حتى انتهاء الإدخال، كرر التنفيذ ما دامت readLine() لا تساوي null. يعيّن هذا النمط الشائع القيمة ويفحصها في شرط واحد.
في كل تكرار تحصل على السطر التالي، إلى أن توقف null الحلقة بطريقة سليمة.
String line;
while ((line = br.readLine()) != null) {
System.out.println("Got: " + line);
}قارئ متعدد الأسطر
إليك برنامجًا كاملًا يعيد طباعة كل سطر تكتبه حتى ينتهي التدفق.
يقرأ البرنامج من System.in، لذلك ينتظر الإدخال ولا يمكن تشغيله تلقائيًا، لكن نمط الحلقة هو بالضبط ما ستعيد استخدامه.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = br.readLine()) != null) {
System.out.println("Echo: " + line);
}
}
}عدّ الأسطر
يمكنك تنفيذ عمل داخل الحلقة، مثل العد. نحصي هنا عدد الأسطر الواردة.
يقرأ كل تكرار سطرًا جديدًا ويزيد العداد. وعند انتهاء الإدخال، نطبع الإجمالي.
int count = 0;
String line;
while ((line = br.readLine()) != null) {
count++;
}
System.out.println("Lines read: " + count);الأسطر الفارغة مقارنةً بـ null
انتبه: يعيد السطر الفارغ (عندما يضغط المستخدم Enter فقط) القيمة ""، أي String فارغة، وليس null.
لذلك يعني "".equals(line) وجود سطر فارغ، بينما يعني line == null أن الإدخال انتهى فعلًا. وهذان شيئان مختلفان.
if (line == null) {
// input finished
} else if (line.isEmpty()) {
// user pressed Enter on a blank line
}محاكاة الأسطر من دون stdin
لمشاهدة readLine() أثناء العمل من دون إدخال من لوحة المفاتيح، يمكننا تغذية BufferedReader من خلال StringReader. وهذه نسخة قابلة للتشغيل بالكامل.
يحتوي النص على سطرين يفصل بينهما \n، وتطبع الحلقة كل سطر منهما.
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new StringReader("apple\nbanana"));
String line;
while ((line = br.readLine()) != null) {
System.out.println("Fruit: " + line);
}
}
}إزالة المسافات البيضاء
غالبًا ما يحتوي الإدخال على مسافات زائدة. استخدم trim() لإزالة المسافات البيضاء من بداية السطر ونهايته قبل استخدامه.
يساعد ذلك على موثوقية المقارنات والتحليل، خصوصًا عندما يضيف المستخدم مسافات عن طريق الخطأ.
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new StringReader(" hello \n"));
String line = br.readLine().trim();
System.out.println("[" + line + "]");
}
}قراءة عدد ثابت من الأسطر
أحيانًا تعرف العدد مسبقًا. تقرأ حلقة for هذا العدد المحدد من الأسطر بالضبط.
يشيع ذلك عندما تنص المسألة على أن “الرقم الأول يحدد عدد الأسطر التالية.”
for (int i = 0; i < 3; i++) {
String item = br.readLine();
System.out.println(i + ": " + item);
}عادات أساسية عند استخدام readLine
تذكّر هذه العادات:
- تحقق دائمًا من
nullقبل استخدام السطر. - استخدم
trim()عندما يمكن أن تسبب المسافات الزائدة أخطاءً. - السلسلة الفارغة ليست مماثلة لـ
null.
سنحوّل هذه الأسطر بعد ذلك إلى أرقام.
اختبار سريع
ماذا تعيد readLine() عندما يصل تدفق الإدخال إلى نهايته؟
مراجعة
تعلمت قراءة الأسطر المفردة، والتكرار باستخدام while ((line = br.readLine()) != null)، والتمييز بين السطر الفارغ ("") ونهاية الإدخال (null).
كما شاهدت أمثلة قابلة للتشغيل تستخدم StringReader. التالي: تحويل الأسطر النصية إلى أرقام.
الأسئلة الشائعة
هل درس «قراءة الأسطر» مجاني؟
نعم — نص درس «قراءة الأسطر» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.
ماذا ستتعلم في «قراءة الأسطر»؟
استخدم readLine والحلقات تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟
لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «قراءة الأسطر»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟
نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.