// Mithilfe dieser Schleife gehen wir durch jedes Zeichen im Tweet
// Die Wahrheitswerte helfen uns zu ueberrpuefen wann wir nach lesen eines # ein neuen Hashtag zu einem eintrag in unsere Liste umwandeln koennen, dafuer gibt es naehmlich folgende Regeln:
// Vor einem # kommt entweder beliebig viele Sonderzeichen oder Leerzeichen und wenn nicht dann ist es der tweetanfang
// Nach einem # kommt mindestens 1 nicht Sonderzeichen und wenn ein Sonderzeichen kommt oder das tweetende dann ist der Hashtag beendet
// Sonderfall 1: nach einem # kommt ohne Sonderzeichen ein weiteres # dann ist es kein Hashtag mehr
// Sonderfall 2: nach einem # kommt kein nicht Sonderzeichen dann auch kein Hashtag
* Auslagerung der Initalisierungen etc. aus der main-Methode
*/
privateString[]makeTuples(){
CSVReaderreader;
CSVReaderreader2;
/**
* aus der Betrachtung das wir nihct wissen aus wievielen Einträgen unsere neue Liste besteht initialisieren wir sie mit 0 und berechnen innerhalb der Funktion ihre wahre Größe
*/
String[]ausgabe=newString[0];
try{
/**
* initiiere reader
* in unserem Fall nutzen wir einen CSVReader
* der frei verfügbaren opencsv-library,
* was das Splitten der einzelnen Zeilen verinfacht,
* da CSVReader auch Angaben wie ";;" korrekt liest
// Wir nutzen eine Hilfsfunktion um herauszufinden wie groß das Array sein muss das wir brauchen um die has-Relation zu speichern
intsize=countHashtags(reader);
ausgabe=newString[size];
// Anschließend erstellen wir dieses Array und
// Nutzen eine weitere Funktion um herauszufinden welche Hashtags in welchen Tweets enthalten waren und das Array mit diesen Informationen geben wir aus.
* Iteriert über jede einzelne Zeile des CSV-files und
* nimmt nunächst alle Hashtags aus dem Tweet. Anschließend erzeug es pro Hashtag einen neuen Eintrag in unsere ausgabe String[]. Der Inhalt ist die Id des Tweets und der komplette Hashtag.
// Eine Funktion wird benutzt um aus einem tweet (dem Eingabeparameter) ein Array von Hashtags zu machen, also alle Hashtags des Tweet herauszubekommen.
String[]tweetToHashtag(Stringtext){
// Zu Beginn werden zwei Wahrheitswerte initialisiert um die Sonderfälle zu berücksichtigen
booleanreadedChar=false;
booleaninHashtag=false;
// und zwei Array Listen um die Hashtags zusammenzufügen und in eine Ausgabeliste zu speichern
// Mithilfe dieser Schleife gehen wir durch jedes Zeichen im Tweet
// Die Wahrheitswerte helfen uns zu überrpüfen wann wir nach lesen eines # und den daruaffolgenenden Zeichen ein neuen Hashtag zu einem eintrag in unsere Liste umwandeln können,
// Dafür gibt es nähmlich folgende Regeln:
// Vor einem Hashtag kommt entweder beliebig viele Sonderzeichen oder Leerzeichen und wenn nicht dann ist es der tweetanfang
// In einem Hashtag kommt nach dem '#' mindestens 1 nicht Sonderzeichen
// Wenn ein Sonderzeichen kommt oder das tweetende dann ist der Hashtag beendet
// Sonderfall 1: In einem potenziellen Hashtag nach einem '#' kommt ohne Sonderzeichen ein weiteres # dann ist es kein Hashtag mehr
// Sonderfall 2: In einem potenziellen Hashtag direkt nach einem '#' kommt eine Zahl, dann ist es auch kein Hashtag
// Sonderfall 3: Nach einem '#' kommt Sonderzeichen oder '#' dann auch kein Hashtag
Stringsonderzeichen=" .!$%^&*+";
Stringzahlen="0123456789";
char[]tweet=text.toCharArray();
for(inti=0;i<tweet.length;i++)
{
// Der Wahrheitswert um zu überprüfen ob wir mit einem Hashtag beginnen können.
// Zu Beginn False
if(readedChar){
if(tweet[i]==' '){
readedChar=false;
}
}else{
// Wahrheitswert um zu überprüfen ob wir in einem potenziellen Hashtag sind