skip to main content

kiesler.at

Anführungszeichen zusammenfassen
updated by rck, 2004-10-03

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

1 | 2 | 3 | 4 | 5 | 6

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.

1 | 2 | 3 | 4 | 5 | 6



RSSComments - Make a comment
The comments are owned by the poster. We are not responsible for its content.
RSSAll Articles
2008, 2007, 2006, 2005, 2004