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.

97 lines
2.8 KiB

  1. # WordCount
  2. Kirjoita ohjelma `WordCount`, joka kysyy käyttäjältä tiedoston nimeä ja tulostaa kyseisessä tiedostossa olevien rivien, sanojen ja merkkien määrän.
  3. Luettavan tiedoston on oltava Java-projektin juuressa. Esimerkiksi suorituksesta:
  4. ```
  5. Anna tiedoston nimi: loremipsum.txt
  6. Tiedostossa on:
  7. 2 riviä
  8. 8 sanaa
  9. 55 merkkiä
  10. ```
  11. Esimerkissä on käytetty tiedostoa `loremipsum.txt`:
  12. ```
  13. Lorem ipsum dolor sit amet,
  14. consectetur adipiscing elit.
  15. ```
  16. 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.
  17. Voit hyödyntää omaa ohjelmaa testatessasi myös [tekstitiedosto.txt](https://gist.githubusercontent.com/swd1tn002/92d5a1082c978e2d0e90a082be1fca0b/raw/c5199dda06f2e34590301b1b711d4b157cc02c76/tekstitiedosto.txt)-tiedostoa.
  18. ```
  19. Anna tiedoston nimi: loremipsum.txt
  20. Tiedostossa on:
  21. 2 riviä
  22. 8 sanaa
  23. 55 merkkiä
  24. ```
  25. **WordCount.java**
  26. ```
  27. import java.io.File;
  28. import java.io.FileReader;
  29. import java.io.IOException;
  30. import java.io.BufferedReader;
  31. import java.util.Arrays;
  32. import java.util.Scanner;
  33. public class WordCount {
  34. public static void main(String[] args) {
  35. Scanner syote = new Scanner(System.in);
  36. System.out.print("Anna tiedoston nimi: ");
  37. String tiedostoNimi = syote.next();
  38. try {
  39. File tiedosto = new File(System.getProperty("user.dir"), tiedostoNimi);
  40. int i, rivit = 0, sanat = 0, merkit = 0;
  41. FileReader lukija = new FileReader(tiedosto);
  42. BufferedReader riviVirta = new BufferedReader(lukija);
  43. String nykyRivi = riviVirta.readLine();
  44. while (nykyRivi != null) {
  45. // Laske rivit
  46. rivit++;
  47. if (!nykyRivi.isEmpty()) {
  48. // Laske sanat
  49. i = 0;
  50. while (i < Arrays.asList(nykyRivi.split(" ")).size()) {
  51. sanat++;
  52. i++;
  53. }
  54. // Laske merkit
  55. i = 0;
  56. while (i < Arrays.asList(nykyRivi.split("")).size()) {
  57. merkit++;
  58. i++;
  59. }
  60. }
  61. // Siirry seuraavaan riviin
  62. nykyRivi = riviVirta.readLine();
  63. }
  64. lukija.close();
  65. System.out.printf("Tiedostossa on:\n%d riviä\n%d sanaa\n%d merkkiä\n", rivit, sanat, merkit);
  66. } catch (IOException e) {
  67. System.err.printf("Tiedostoa %s ei löydy tai sen lukemisessa kävi virhe", tiedostoNimi);
  68. }
  69. }
  70. }
  71. ```