การอ่านทีละบรรทัด
readLine และลูป
การอ่านทีละบรรทัด เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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);บรรทัดว่างกับค่าว่าง
โปรดระวัง: บรรทัดว่าง (ผู้ใช้เพียงกด Enter) จะส่งคืน "" ซึ่งเป็น String ว่าง ไม่ใช่ null
ดังนั้น "".equals(line) หมายถึงบรรทัดว่าง ส่วน line == null หมายถึงข้อมูลเข้าสิ้นสุดลงจริง ๆ ทั้งสองกรณีแตกต่างกัน
if (line == null) {
// input finished
} else if (line.isEmpty()) {
// user pressed Enter on a blank line
}การจำลองบรรทัดโดยไม่ใช้ข้อมูลเข้ามาตรฐาน
หากต้องการดูการทำงานของ 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 ถัดไป: การเปลี่ยนบรรทัดข้อความให้เป็นตัวเลข
คำถามที่พบบ่อย
บทเรียน “การอ่านทีละบรรทัด” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การอ่านทีละบรรทัด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การอ่านทีละบรรทัด”
readLine และลูป คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การอ่านทีละบรรทัด” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม
ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ