Auf Thema antworten

Warum nicht gleich eine Klasse Website anstelle von StringUtils, bzw. WebsiteUtils?


Einen Konstruktor der die URL als String erhält und eine einfache Methode getText()


Das ganze in einem Interface Generalisieren, wenn! man sich überlegt, das ganze auch auf andere Quellen wie zum Beispiel Dateien auszuweiten. z.b. TextProvider mit getText()


Dann kann man sich überlegen, ob man mit StringUtils arbeiten möchte oder eine Klasse RegExFinder zu nehmen, die im Konstruktor einen TextProvider erhält und dann eine Methode extractStrings(String pattern) hat die List zurückliefert.


Was aber garnicht geht ist diese Zeile, weil zu lange

ArrayList<String> jokesextracted = StringUtils.extractString("(<div class=\"joke\">)+.*?</div>", StringUtils.getSourceCodeFromWebsite("http://www.witze.net"));


ein Minimum ist dies wie folgt zu ändern

String websiteURL = "http://www.witze.net";

String websiteText = StringUtils.getSourceCodeFromWebsite(websiteURL);


String pattern = "(<div class=\"joke\">)+.*?</div>";


List<String> jokesextracted = StringUtils.extractString(pattern, websiteText);


bzw.


String websiteURL = "http://www.witze.net";

TextProvider text = new Website(websiteURL);


RegExFinder regExFinder = new RegExFinder(text);


String pattern = "(<div class=\"joke\">)+.*?</div>";

List<String> jokesextracted = regExFinder.extractStrings(pattern);


Beim Code, der die Website ausliest, kann man try-with-ressource nehmen, da man mittlerweile Java 7 voraussetzen kann (solange man nicht für Android programmiert, allerdings werden ja auch schon Java 8 Features verwendet) und damit die Vorteile von AutoCloseable nutzen kann.



Oben