Diesmal habe ich mich an einem in mehrerer Hinsicht ungewöhlichen Programm versucht: die Aufgabenstellung ist tw. unklar und schlichtweg falsch; das Programm ergibt keinen Sinn; es gibt bereits Lösungen dazu. Die Beispielnummer lautet diesmal 1025
unquote() | |
---|---|
Wie so oft, besteht unsere Hauptschleife aus einem StringTokenizer. Sie sieht folgendermaßen aus: 156 public static String unquote(String s) 157 throws Exception 158 { 159 StringTokenizer st=new StringTokenizer(s); 160 checkWoerter(st.countTokens()); 161 162 boolean print=false, nprint=print; 163 String wort=st.nextToken(), result=""; 164 165 while(! wort.equals(".")) { 166 167 checkWordLength(wort); 168 169 if(wort.startsWith("\"")) { 170 print=!print; 171 wort=wort.substring(1); 172 } 173 174 if(hasRealEndingQuote(wort)) { 175 nprint=!print; 176 wort=wort.substring(0, wort.length()-1); 177 } else { 178 nprint=print; 179 } 180 181 if(print) 182 result=concat(result, extractWord(wort)); 183 184 print=nprint; 185 186 wort=st.nextToken(); 187 } 188 189 return(result); 190 } |
Beschreibung unquote | |
---|---|
160 gleich von Anfang an prüfen wir, ob die Wortanzahl passt. Der StringTokenizer nimmt uns auch hier Arbeit ab. 162 Wörter werden erst ausgegeben, sobald mindestens ein führendes oder abschließendes Anführungszeichen entdeckt wurde. Da diese bisher noch nicht der Fall war, initialisieren wir mit false. 163 wir lesen in wort das erste Wort ein und setzen das Ergebnis auf einen Leerstring. Schließlich haben wir noch keine Ausgabe. 165 solange wir nun keinen alleinestehenden Punkt entdecken (unser Abbruchkriterium), analysieren wir Wortanfang und Ende und hängen gegebenenfalls das bearbeitete Wort an den Ergebnisstring. 167 mit checkWordLength() prüfen wir, ob die Längenvorgabe für Wörter eingehalten wurde 169-172 beginnt unser Wort mit einem Anführungszeichen, schalten wir unseren Ausgabeschalter um. Durch !print wird er false, wenn er true war. Und umgekehrt. 174-179 hier bearbeiten wir noch ein etwaiges vorhandenes abschließendes Anführungszeichen. Stoßen wir auf eines, ist die Ausgabe des Folgewortes gegenteilig zur Ausgabe von diesem Wort, sonst gleich. Heißt: Geben wir das aktuelle Wort aus, wird das nächste nicht ausgegeben. Und umgekehrt. 176 hier entfernen wir das abschließende Anführungszeichen. 181-182 soll das aktuelle Wort ausgegeben werden, hängen wir das durch extractWord gewonnene Ergebnis einfach an unser Gesamtergebnis an. concat ist selbstgeschrieben und kümmert sich auch um Leerzeichen zwischen Worten. 184 Hier treffen wir die Vorgabe für die Ausgabe des Folgewortes. 186 und holen uns zu guter Letzt das nächste Token. |
Comments - Make a comment |
The comments are owned by the poster. We are not responsible for its content. |
AdministrativeTexts
updated by freddiemac1993, 2013-06-14
wiki
Re: adventures
created by brittdavis10, 2012-02-23 (1 rply, 3 views)
thread
Re: how to run phpwebsite...
created by alexander, 2011-08-25 (2 rpls, 3607 views)
thread
Re: Forum tags
created by HaroldFaragher, 2011-08-22 (3 rpls, 8488 views)
thread