Skip to content

Instantly share code, notes, and snippets.

@ahojukka5
Created May 5, 2020 20:35
Show Gist options
  • Save ahojukka5/08c3ba103f272d214a7557f9b6ce4f5a to your computer and use it in GitHub Desktop.
Save ahojukka5/08c3ba103f272d214a7557f9b6ce4f5a to your computer and use it in GitHub Desktop.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Tehtava4 {
private static String readFile(String filename) {
String content = null;
try {
Scanner scanner = new Scanner(new File(filename));
content = scanner.useDelimiter("\\A").next();
} catch (FileNotFoundException ex) {
Logger.getLogger(Tehtava4.class.getName()).log(Level.SEVERE, null, ex);
}
return content;
}
private static void regexpHelper(String regexp, String content) {
Pattern p = Pattern.compile(regexp);
Matcher m = p.matcher(content);
while (m.find()) {
System.out.println(m.group(1));
}
}
public static String removeTags(String content) {
Pattern p = Pattern.compile("<.+?>");
Matcher m = p.matcher(content);
return m.replaceAll("");
}
public static void main(String[] args) {
Scanner lukija = new Scanner(System.in);
// Kysytään ensin tiedoston nimi
// Käytä tätä nimeä tiedoston avaamiseen
// Aloitustiedosto
System.out.println("Anna html-tiedoston nimi (testatessa esimerkki.html):");
String tiedostonNimi = lukija.nextLine();
String content = readFile(tiedostonNimi);
// System.out.println(content);
// Tulosta järjestyksessä seuraavat tiedot. Älä muuta olemassaolevia tulostulauseita!
System.out.println("Koko sivun otsikko:");
// a) Etsi ja tulosta sivun otsikko (tägien <title> ja </title> välissä).
regexpHelper("<title>(.*?)</title>", content);
System.out.println("Linkkien osoitteet:");
// b) Etsi ja tulosta kaikkien sivulla olevien linkkien osoitteet.
regexpHelper("href=\"(.*?)\"", content);
System.out.println("Sivun otsikot ja alaotsikot:");
// c) Tulosta ensin kaikki ykköstason (h1) otsikot, sitten kakkostason (h2) otsikot
// ja lopuksi kolmostason (h3) otsikot.
// Tulosta otsikot siinä järjestyksessä kuin ne dokumentissa esiintyvät
regexpHelper("<h1>(.*?)</h1>", content);
regexpHelper("<h2>(.*?)</h2>", content);
regexpHelper("<h3>(.*?)</h3>", content);
System.out.println("Sanojen yhteismäärä tekstipalstoissa:");
// d) Laske ja tulosta ruudulle (yhtenä kokonaislukuna) kuinka monta sanaa sivun kaikissa tekstipalstoissa
// (tägien <p> ja </p> välissä) on yhteensä.
// Huomaa, että tekstipalstoissa esiintyviä tägejä EI lasketa sanoiksi
Pattern p = Pattern.compile(".*?<p>(.*?)</p>.*?", Pattern.DOTALL);
Matcher m = p.matcher(content);
int numberOfWords = 0;
while (m.find()) {
String s = removeTags(m.group(1));
String[] words = s.trim().split("\\s+");
numberOfWords += words.length;
// for (int i=0; i < words.length; i++) {
// System.out.println(String.format("%d: %s", i, words[i]));
// }
// System.out.println(String.format("%s (%d words, %d words total)", s, words.length, numberOfWords));
}
System.out.println(numberOfWords);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment