StringBuilder kaputt?

Status
Nicht offen für weitere Antworten.

DocRandom

Top Contributor
Hi!

Ich wandle mit Hilfe des HTMLEditorKit, eine HTML-Site nach ASCII.
Das funzt auch ganz gut.
Danach möchte ich den Text wieder aufbereiten, damit er von einer (in PHP gecodeten) Web-Page wieder verarbeitet werden kann.
Zu diesem Behufe dachte ich mir, sei das StringBuilder-Object genau das Richtige, jedoch weit gefehlt.
Am Beginn läuft alles prima, doch mitten drinnen, wird nix mehr gemacht.

Zum besseren Verständnis hier mal mein Code:
Code:
package scanner;

import java.io.IOException;
import java.io.StringReader;
import java.util.Scanner;

import javax.swing.text.BadLocationException;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;

import com.meterware.httpunit.WebResponse;

public class HtmlToText {

	private HTMLEditorKit htmlKit;
	private HTMLDocument doc;
	
	public HtmlToText() {
		htmlKit = new HTMLEditorKit();
		doc = (HTMLDocument)htmlKit.createDefaultDocument();
		doc.putProperty("IgnoreCharsetDirective", new Boolean(true));
	}
	public String getText(WebResponse resp) {
		String plaintxt ="";
		try {
			htmlKit.read(new StringReader(resp.getText()), doc, 0);
			plaintxt = getFormatedText(doc.getText( 0, doc.getLength()));
		}catch (BadLocationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return plaintxt;
	}
	private String getFormatedText(String s){
		
		boolean kololine = false;
		boolean tableline = false;
		
		String tab = s.replaceAll("\n", "\t");
		StringBuilder sb = new StringBuilder();
				
		Scanner sc = new Scanner(tab).useDelimiter("\t");
		
		while (sc.hasNext()) {
			String word = sc.next();
			word = word.trim();
			// wir finden "Das Universum - unendliche Weiten"
			if (word.equalsIgnoreCase("Das Universum - unendliche Weiten")) {
				sb.append(word);
				sb.append("\n");
				continue;
			}
			// wir finden die Galaxy - Zeile
			if(word.startsWith("Galax")) {
				sb.append(word);
				sb.append("\n");
				continue;
			}
			// wir finden evtl. Nebel-Zeile
			if(word.endsWith("Nebel)")) {
				sb.append(word);
				sb.append("\n\n");
				continue;
			}
			// wir finden das up/down - menu
			if(word.startsWith("<-- ")) {
				sb.append(word);
				sb.append("\n");
				continue;
			}
			// wir finden die Tabellenüberchrift
			if(word.startsWith("Kolonie")) {
				tableline = true;
			}
			// Zeile vollstänidg zusammen setzen
			if (tableline == true) {
				sb.append(word);
				if(word.startsWith("Aktion")) {
					tableline = false;
					sb.append("\n");
				} else {
					sb.append("\t");
				}
				continue;
			}
			// auf Bildzeile prüfen
			if (word.startsWith("0")&&(kololine == false)) {
				sb.append(word);
				sb.append("\t\n");
				continue;
			}
			if(word.startsWith("1")&&(kololine == false)) {
				kololine = true;
				sb.append("\n");
			}
			// den rest zusammensetzen
			sb.append(word);
			if(word.endsWith("versenden")) {
				sb.append("\n");
			} else {
				sb.append("\t");
			}
		}
		return sb.toString();
	}
}

Noch kurz die Ausgabe:
System: 220 erfolgreich gescannt

< < < < < < < < < < < < < < < HILFE Postit erstellen Systemmeldung Nicht so fix Das Universum < Das Universum - unendliche Weiten
Galaxy 3, Sonnensystem 220
RON-E7029 (Roter Nebel)

<-- Galaxie Sonnensystem -->
Kolonie Planetentyp Objekttyp Name Allianztag Planetenname Punkte Aktionen
0

1 Gasgigant --- - 0 Flotte versenden
2 Steinklumpen --- - 0 Flotte versenden
3 Steinklumpen --- - 0 Flotte versenden
4 Steinklumpen --- - 0 Flotte versenden
5 Steinklumpen --- - 0 Flotte versenden
6 Asteroid --- - 0 Flotte versenden
7 Steinklumpen --- - 0 Flotte versenden
8 Steinklumpen Kolonie therealzeus [Kilrathy] Haltern 44070 Flotte versenden 9 Steinklumpen --- - 0 Flotte versenden 10 Eisplanet --- - 0 Flotte versenden 11 Steinklumpen 5 Flotte(n) Kolonie -=DocRandom=- [Kilrathy] Fünfhaus 60939 Flotte versenden 12 Gasgigant Sammelbasis RONIN [ROCKETEERS] (HC) Ressourcensammelbasis 0 Flotte versenden 13 Steinklumpen Kolonie fauli euphorie 117447 Flotte versenden 14 Steinklumpen --- - 0 Flotte versenden 15 Eisplanet --- - 0 Flotte versenden 16 Steinklumpen Kolonie masterminder [Gnome] beta 122108 Flotte versenden 17 Steinklumpen --- - 0 Flotte versenden 18 Steinklumpen Kolonie Nightflyer [Kilrathy] Ragnarok 101259 Flotte versenden 19 Steinklumpen --- - 0 Flotte versenden Fünfhaus (3:220:11) Borussia MG (3:211:12) 02.11.2007 22:26:43 Rückkehr Fünfhaus (3:220:11) Borussia MG (3:211:12) 02.11.2007 22:27:07 Rückkehr Fünfhaus (3:220:11) Borussia MG (3:211:12) 02.11.2007 22:43:10 Rückkehr Fünfhaus (3:220:11) Borussia MG (3:211:12) 02.11.2007 23:09:05 Rückkehr Fünfhaus (3:220:11) Erdberg (3:199:13) 03.11.2007 03:00:01 Rückkehr
..bis zum 8. Planeten, läuft alles wunderbar, danach ist es aus und es wird wieder alles in einer Wurst dargestellt!
Ist das ein Fehler des StringBuilders, oder habe ich einen Fehler den ich nicht sehe?

lg
DocRandom
 

DocRandom

Top Contributor
Moin!

..so habe mal darüber geschlafen und bin auf meinen loschien Fehler gestoßen.
Manchmal ist es doch gut, wenn man/frau mal ne Pause einlegt.

für alle die dennoch wissen möchten wo der Hund begraben lag, hier der neue Code:
Code:
private String getFormatedText(String s) {
		
		// flags für Koloniezeile & Überschrift
		boolean kololine = false;
		boolean tableline = false;
		
		
		// Konstanten die immer zu suchen sind
		final String UNIVERSUM = "Das Universum - unendliche Weiten";
		final String GALAXY = "Galaxy";
		final String NEBEL = "Nebel)";
		final String KOLONIE = "Kolonie";
		final String ACTION = "Aktionen";
		final String FLEET = "Flotte versenden";
		final String MENU = "<--";
		
		StringBuilder sb = new StringBuilder();
		
		String[] lines = s.split("\n");
		
		for(String line: lines) {
			// Leerzeichen entfernen
			line = line.trim();
					
			// wir suchen die Überschrift
			if(line.equalsIgnoreCase(UNIVERSUM)) {
				sb.append(line);
				sb.append("\n");
				continue;
			}
			// wir suchen die Galaxy
			if(line.startsWith(GALAXY)) {
				sb.append(line);
				sb.append("\n");
				continue;
			}
			// evtl. Nebel einbinden
			if(line.endsWith(NEBEL)) {
				sb.append(line);
				sb.append("\n");
				continue;
			}
			// wir suchen die Menü-zeile
			if(line.startsWith(MENU)) {
				sb.append("\n");
				sb.append(line);
				sb.append("\n");
				continue;
			}
			// wir suchen die Tabellenüberschrift
			if((line.startsWith(KOLONIE))&&(kololine == false)) {
				tableline = true;
			}
			// Zeile vollstänidg zusammen setzen
			if (tableline == true) {
				sb.append(line);
				if(line.startsWith(ACTION)) {
					tableline = false;
					sb.append("\n");
				} else {
					sb.append("\t");
				}
				continue;
			}
			// wir suchen die Bildzeile
			if(line.startsWith("0")) {
				sb.append(line);
				sb.append(" \t\n");
				continue;
			}
			// wir suchen die erste Kolonien-Zeile
			if((line.startsWith("1")) && (kololine == false)) {
				kololine = true;				
			}
			// wir setzen die Koloniezeilen zusammen
			if(kololine == true) {
				if (line.isEmpty()) {
					sb.append(" ");
				} else {
					sb.append(line);
				}
				if(line.equalsIgnoreCase(FLEET)) {
					sb.append("\n");
				} else {
					sb.append("\t");
				}
			}
		}
		return sb.toString();
	}
lg DocRandom
 

Leroy42

Top Contributor
DocRandom hat gesagt.:
und bin auf meinen loschien Fehler gestoßen.

Aha! Da bin ich jetzt aber gespannt...

DocRandom hat gesagt.:
für alle die dennoch wissen möchten wo der Hund begraben lag, hier der neue Code:
Code:
...

Toll!

Da werde ich doch gleich deine beiden geposteten Codes Zeile für Zeile
vergleichen um auch herauszufinden, was nun dein logischer Fehler war.

Da hab' ich dann am Wochenende, dank dir, etwas zu tun und muss
nicht einfach nur dumm abhängen!

Danke nochmals! :applaus:
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben