Swing HTML Text aus JLabel ohne "HTML-Tags" in String einlesen

tschero

Aktives Mitglied
Hi Leute,

ich habe ein JLabel welches einen HTML-formatierten Text anzeigt:

HTML:
<html> <head></head> <body> <div style=text-align: center;>Zeile 1<br> Zeile 2<br> Zeile 3 </div></body> </html>
.

Wie kann ich den angezeigten Text, ohne die ganzen HTML-Tags wieder in einen String einlesen?
Die TAGs können in ihrer Anzahl variieren (mal ist ein Wort fett, mal nicht, usw).

Ich benötige in dem String (String[], ArrayList<String>, egal was) den relevanten Text --> "Zeile 1" "Zeile 2" "Zeile 3".

Letztendlich geht es mir nur um die Ausgabe ohne HTML-Tags.

Gruß
tschero
 
Wenn es wirklich nur darum geht, die Tags rauszulöschen, könnte man die per regex rauswerfen:
Java:
public class FilterText {
	
	public static void main(String[] args) {
		String html = "<html> <head></head> <body> <div style=text-align: center;>Zeile 1<br> Zeile 2<br> Zeile 3 </div></body> </html>";
		System.out.println(filterOutTags(html));
	}
	
	public static String filterOutTags(String html) {
		return html.replaceAll("<.*?>", "").trim();
	}
}

Ob das nun auf jedem X-beliebigem html Text so funktioniert wie du es gerne hättest kann ich nicht sagen.
 
Hi,

HTML-Text:
HTML:
<html> <head></head> <body> <div style=text-align: center;>Bringen Sie die Komponenten in die richtige Reihenfolge! <br> Zeile 2<br> Zeile 3 </div></body> </html>

Ausgabe:
Code:
Bringen Sie die Komponenten in die richtige Reihenfolge!  Zeile 2 Zeile 3

funktioniert hervorragend.

Vielen Dank für die schnelle Hilfe.

Gruß
tschero
 
Und als Nachklapp nochmal eine Frage zu der Anweisung:
Java:
return html.replaceAll("<.*?>", "").trim();

Was genau bedeutet das Fragezeichen, bzw wie könnte man beschreiben was es genau darstellt.
Es kommt ja auch bei den Generics (glaube ich) vor und da habe ich das auch noch nicht so genau verstanden.

Ich würde hier den Inhalt der Klammer so Übersetzen:

Lösche den gesamten Inhalt eines Tags(".*"), egal was es ist("?") und ersetze alles durch ("").

Klingt Laienhaft, ich weiß 😳.

Gruß
tschero
 
Es kommt ja auch bei den Generics (glaube ich) vor und da habe ich das auch noch nicht so genau verstanden.
Ist ein ganz anderes Thema. Es handelt sich dabei um eine Wildcard: Wildcards (The Java™ Tutorials > Learning the Java Language > Generics (Updated))

Lösche den gesamten Inhalt eines Tags(".*"), egal was es ist("?") und ersetze alles durch ("").
Der Punkt heißt schon "egal was", er steht nämlich für jedes Zeichen. Das Fragezeichen dahinter schaltet die Gierigkeit des "*" ab. Beispiel:
Java:
public class GreedyVsReluctantRegex {
	public static void main(final String... args) {
		final String html = "a<b>c</b>d<e>f</e>g";
		System.out.println(html.replaceAll("<.*>", "")); // greedy: "ag"
		System.out.println(html.replaceAll("<.*?>", "")); // reluctant: "acdfg"
	}
}
Wie du siehst, wird beim ersten Regex alles zwischen (und inklusive) "<b>" und "</e>" entfernt. Es wird nur ein einziges Mal (groß) ersetzt.
Beim zweiten Regex wird so wenig wie möglich ersetzt, nämlich "<b>", "</b>", "<e>" und "</e>". Es finden also vier (kleine) Ersetzungen statt.
 

Zurück
Oben