Java Academy · Lektion

Läsa rader

readLine och loopar

Lektion 2 av 413 steg

Läsa rader är en gratis lektion i Java Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Java Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Java Academy innehåller totalt 4 lektioner.

Metoden readLine

readLine() är kärnan i BufferedReader. Den läser tecken tills den stöter på en radbrytning (Enter) och returnerar sedan raden som en String.

Den returnerade texten innehåller inte radbrytningstecknet. I den här lektionen läser vi enstaka och flera rader.

String line = br.readLine();

Läsa en rad

Här är det enklaste fallet: läs ett namn och skriv ut en hälsning. readLine() blockerar (väntar) tills användaren trycker på Enter.

Eftersom den läser från System.in pausar det här kodexemplet för att invänta indata från tangentbordet, så det kan inte köras automatiskt här.

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 + "!");
    }
}

Vad readLine returnerar i slutet

När det inte finns mer indata (slutet på strömmen eller när användaren signalerar EOF) returnerar readLine() null i stället för en String.

Det här är en viktig signal: genom att kontrollera om värdet är null vet vi när vi ska sluta läsa.

String line = br.readLine();
if (line == null) {
    System.out.println("No more input.");
}

Läsa till EOF

Om du vill läsa varje rad tills indata tar slut kan du loopa medan readLine() inte är null. Det här vanliga mönstret tilldelar ett värde och kontrollerar det i samma villkor.

Varje varv ger dig nästa rad, tills null avslutar loopen på ett ordnat sätt.

String line;
while ((line = br.readLine()) != null) {
    System.out.println("Got: " + line);
}

En läsare för flera rader

Här är ett komplett program som skriver ut varje rad du skriver, tills strömmen tar slut.

Det läser från System.in, så det väntar på indata och kan inte köras automatiskt, men loopmönstret är exakt det du kommer att återanvända.

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);
        }
    }
}

Räkna rader

Du kan utföra arbete i loopen, till exempel räkna. Här räknar vi hur många rader som kommer in.

Varje iteration läser en ny rad och ökar en räknare. När indata tar slut skriver vi ut summan.

int count = 0;
String line;
while ((line = br.readLine()) != null) {
    count++;
}
System.out.println("Lines read: " + count);

Tomma rader kontra null

Var försiktig: en tom rad (användaren trycker bara på Enter) returnerar "", en tom String — inte null.

Alltså betyder "".equals(line) en tom rad, medan line == null betyder att indata verkligen är slut. Det är två olika saker.

if (line == null) {
    // input finished
} else if (line.isEmpty()) {
    // user pressed Enter on a blank line
}

Simulera rader utan stdin

Om du vill se readLine() i praktiken utan indata från tangentbordet kan du mata en BufferedReader med en StringReader. Det här exemplet kan köras direkt.

Strängen innehåller två rader som separeras av \n, och loopen skriver ut var och en.

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);
        }
    }
}

Ta bort blanksteg

Indata innehåller ofta oönskade blanksteg. Använd trim() för att ta bort inledande och avslutande blanksteg från en rad innan du använder den.

Det gör jämförelser och parsning mer tillförlitliga, särskilt när användare råkar lägga till blanksteg.

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 + "]");
    }
}

Läsa ett fast antal rader

Ibland känner du till antalet i förväg. En for-loop läser exakt så många rader.

Det här är vanligt när en uppgift säger “det första talet anger hur många rader som följer.”

for (int i = 0; i < 3; i++) {
    String item = br.readLine();
    System.out.println(i + ": " + item);
}

Viktiga vanor för readLine

Kom ihåg följande vanor:

  • Kontrollera alltid om värdet är null innan du använder en rad.
  • Anropa trim() när oönskade blanksteg kan orsaka buggar.
  • En tom sträng är inte samma sak som null.

Nästa steg är att omvandla raderna till tal.

Snabbkontroll

Vad returnerar readLine() när indata strömmen har nått sitt slut?

Sammanfattning

Du har lärt dig att läsa enstaka rader, loopa med while ((line = br.readLine()) != null) och skilja en tom rad ("") från slutet på indata (null).

Du har också sett körbara exempel med StringReader. Nästa steg är att omvandla textrader till tal.

Gratis att börja

Lär dig Java med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
104
Lektioner
374

Vanliga frågor

Är lektionen ”Läsa rader” gratis?

Ja – hela texten till ”Läsa rader” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Java Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Java Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Läsa rader”?

readLine och loopar Ni övar på Java Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Java Academy?

Du behöver inga förkunskaper. Utbildningen i Java Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Läsa rader”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Java Academy-lektionen?

Ja. Varje Java Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Varför BufferedReader
  2. Läsa rader
  3. Tolka tal från indata
  4. Stänga strömmar säkert
← Tillbaka till Java Academy