Gå til innhold

Søke gjennom *txt-fil, brukervalgt ord.


Anbefalte innlegg

Hei!

Så var det nok en gang et nybegynnerspørsmål fra min side.

 

Jeg har fått i oppgave å lage et program som i første omgang leser en txt-fil og printer den. Det har jeg fått til.

 

Så var andre del av oppgaven å telle antall ganger ordet "Winnie-the-Pooh" forekom. Det har jeg også fått til.

 

Siste del av oppgaven derimot, den har jeg fiklet med i timesvis, og jeg finner ikke ut hvordan jeg retter opp i feilen.

 

Det som skjer er at scanneren jeg har lagt inn under "PART C" i oppgaven teller det siste ordet i teksten, selv om den tar imot bruker-inputten.

 

For ordens skyld, "pluskvamperfektum" står der i mangel av noe bedre, siden jeg ikke forstår helt hva jeg skal skrive der.

 

Legger ved koden nedenfor, som kompilerer, og txt-filen som vedlegg.

import java.util.Scanner;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;

public class Innlesing {
    public static void main(String[] args) throws Exception {

    String winnie;
    int antall = 0;
    int linjeNummer = 1;
    String filNavn = "winnie.txt";
    Scanner scanFil = new Scanner(new File(filNavn));

   // PART A
   while (scanFil.hasNextLine()) {
       String linje = scanFil.nextLine();
       System.out.println("Linje " + linjeNummer + ": " + linje);
       linjeNummer++;
   }

   // PART B
   Scanner soekeOrd = new Scanner(new File(filNavn));
   while (soekeOrd.hasNextLine()){
       winnie = soekeOrd.nextLine();
       if (winnie.equals("Winnie-the-Pooh")){
       antall += 1;
       }
   }

   System.out.println("Antall forekomster av Winnie-the-Pooh er: " + antall );

   // PART C
   Scanner brukerInput = new Scanner(System.in);
   String brukerInput2;

   System.out.println("Hvilket ord vil du soeke paa?: ");
   brukerInput2 = brukerInput.nextLine();

   while (scanFil.hasNextLine()) {
       brukerInput2 = scanFil.nextLine();
       if (brukerInput.equals("pluskvamperfektum")) {
       antall +=1;
       }
   }
System.out.println("Antall forekomster av " + brukerInput2 + " er: " + antall );
  }
}
Lenke til kommentar
Videoannonse
Annonse

equals er engelsk for "er lik"/"er det samme som" og metoden sjekker om objektet du bruker metoden på er likt objektet du sender inn. Altså sjekker du brukerInput som er en Scanner , er det samme som strengen "pluskvamperfektum", dette er garantert ikke det du vil sjekke. På slutten skriver du ut antall variabelen som du brukte i forrige oppgave til å telle noe helt annet.

Lenke til kommentar

I Java så brukes equals()-metoden for å sjekke om to Stringer er like hverandre.

 

@kimbert007:

Er noen ting du må fikse på for å få det til å funke:

- Du bruker antall-variabelen flere steder uten å sette den til 0 igjen, slik at resultatet fra B vil påvirke C. Enten settt antall til 0 etter B, eller lag en ny variabel

- Du bruker to forskjellige Scanner i A og B, men i C bruker du scanneren igjen fra A, som da er på slutten av filen. Lag en ny en der og.

- Av en eller annen grunn så spør du om et ord fra brukeren, for å så overskrive det igjen i loopen. Du må spørre om et ord, også sjekke om scanner.nextLine().contains(brukerInput2).

 

Her er en fungerende versjon med noen modifikasjoner:

 

import java.util.Scanner;
import java.io.File;

public class Innlesing {
    
    public static void main(String[] args) throws Exception {

        int antall = 0;
        int linjeNummer = 1;
        String filNavn = "winnie.txt";
        Scanner aScanner = new Scanner(new File(filNavn));

        // PART A
        while (aScanner.hasNextLine())
            System.out.println("Linje " + linjeNummer++ + ": " + aScanner.nextLine());
        
        aScanner.close();
        
        
        // PART B
        Scanner bScanner = new Scanner(new File(filNavn));
        while (bScanner.hasNextLine())
            if (bScanner.nextLine().contains("Winnie-the-Pooh"))
                antall++;
    
        System.out.println("Antall forekomster av Winnie-the-Pooh er: " + antall);
        antall = 0;
        bScanner.close();
        
        
        // PART C
        Scanner cScanner = new Scanner(new File(filNavn));
        Scanner brukerInput = new Scanner(System.in);
        System.out.print("Hvilket ord vil du soeke paa?: ");
        String searchWord = brukerInput.next();

        while (cScanner.hasNextLine())
            if (cScanner.nextLine().contains(searchWord))
                antall++;
                
        System.out.println("Antall forekomster av " + searchWord + " er: " + antall);
        
        cScanner.close();
        brukerInput.close();
    }

}
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...