Java fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

2.8 KiB

WordCount

Kirjoita ohjelma WordCount, joka kysyy käyttäjältä tiedoston nimeä ja tulostaa kyseisessä tiedostossa olevien rivien, sanojen ja merkkien määrän.

Luettavan tiedoston on oltava Java-projektin juuressa. Esimerkiksi suorituksesta:

Anna tiedoston nimi: loremipsum.txt
Tiedostossa on:
2 riviä
8 sanaa
55 merkkiä

Esimerkissä on käytetty tiedostoa loremipsum.txt:

Lorem ipsum dolor sit amet,
consectetur adipiscing elit.

Riveksi lasketaan myös tyhjät rivit ja merkeiksi myös välilyönnit. Sanojen laskemiseksi voit käyttää String-luokan split-metodia, jolla pilkot kunkin rivin välilyöntien kohdalta. Huomaa kuitenkin, että tyhjällä rivillä ei saa laskea yhtään sanaa, vaikka split-metodi palauttaakin yhden pituisen taulukon.

Voit hyödyntää omaa ohjelmaa testatessasi myös tekstitiedosto.txt-tiedostoa.

Anna tiedoston nimi: loremipsum.txt
Tiedostossa on:
2 riviä
8 sanaa
55 merkkiä 

WordCount.java

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.BufferedReader;
import java.util.Arrays;
import java.util.Scanner;
public class WordCount {
public static void main(String[] args) {
Scanner syote = new Scanner(System.in);
System.out.print("Anna tiedoston nimi: ");
String tiedostoNimi = syote.next();
try {
File tiedosto = new File(System.getProperty("user.dir"), tiedostoNimi);
int i, rivit = 0, sanat = 0, merkit = 0;
FileReader lukija           = new FileReader(tiedosto);
BufferedReader riviVirta    = new BufferedReader(lukija);
String nykyRivi             = riviVirta.readLine();
while (nykyRivi != null) {
// Laske rivit
rivit++;
if (!nykyRivi.isEmpty()) {
// Laske sanat
i = 0;
while (i < Arrays.asList(nykyRivi.split(" ")).size()) {
sanat++;
i++;
}
// Laske merkit
i = 0;
while (i < Arrays.asList(nykyRivi.split("")).size()) {
merkit++;
i++;
}
}
// Siirry seuraavaan riviin
nykyRivi = riviVirta.readLine();
}
lukija.close();
System.out.printf("Tiedostossa on:\n%d riviä\n%d sanaa\n%d merkkiä\n", rivit, sanat, merkit);
} catch (IOException e) {
System.err.printf("Tiedostoa %s ei löydy tai sen lukemisessa kävi virhe", tiedostoNimi);
}
}
}