Strings von HTML befreien

Dave

Aktives Mitglied
Hallo,

ich würde gerne wissen ob JAVA vom Hausaus iene möglichkeit bietet Strings von HTMLcode zu befreien ?

ich bezweifle aber dies deshalb habe ich eine andere Frage hat jemand vllt. ein gutes deutschsprachiges Tutorial wo beschrieben wird wie man Reuläre Ausdrucke erstellt?

ich würde zb. wissen wie ich in einem regex mehrere Wörter austauschen kann (replaceAll()).


Bäruchte sowas da ich von einer Internetseite kopierten Text aus der zwischanablage auslese und da nach bestimmten Schlüsselwörtern und deren Parametern suchen muss.

Bsp:
HTML:
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body><tr><td valign="top" width="30%">Schlüsselwort1:

              </td>

              <td valign="top" width="70%">ParameterVon1

          	</td>

  	 </tr>
  <tr>
<td height="1" valign="top" width="70%"><div id="tdetails" 
style="display: inline;"><div style="width: 150px; float: left;">Schlüselwort2:</div>
 ParameterVon2<br style="clear: left;"><div style="width: 150px; float: left;">Schlüsselwort3:</div>
.......

das war ein kleiner Ausschnitt von dem Text den ich auslese, wie ihr seht ändert sich die Position der Schlüsselwörter und Parameter, somit fählt das Zeilen und Zeichen genaue absuchen weg.

ich wollte jetzt einfach alle HTMLtags entfehrnen damit ich nur Schlüsselwörter😛arameter stehen habe aber das wird schwer da ich mit regex garkeien Erfahrung habe ^^


also meien Fargen lauten:

1 - Gibt es eine Java funktion die Strings von HTML befreit?
2 - Kennt jemand ein gutes deutschsprachigesTutorial für regex?
3 - Hat jemand vllt. eien andere idee wie ich mir die Schlüsselwörter und deren parameter von dem Text rausfiltern kann ?
LG
 
Hallo, ich hab's mal ganz rudimentär gelöst, denke, es klappt:

Java:
import java.util.ArrayList;

class testing{
	public static void main(String[] args){
		testing t = new testing();
		ArrayList<String> inhalt = t.suche("<html><p>testtextleckerlecker</p><p>sehrlecker</p></html>");
		for(int i=0;i<inhalt.size();i++){
			System.out.println(inhalt.get(i));
		}
	}
	
	public ArrayList<String> suche(String st){
		ArrayList<String> ergebnis = new ArrayList<String>();
		for(int i=0;i<st.length();i++){
			String tmp = st.charAt(i)+"";
			if(tmp.equals(">")){
				if((i+1)<st.length()){
				String next = st.charAt(i+1)+"";
				if(!next.equals("<")){
					StringBuffer sb = new StringBuffer();
					String hit ="";
					int index = ++i;
					while(!hit.equals("<")){
						hit = st.charAt(index)+"";
						sb.append(hit);
						index++;
						hit = st.charAt(index)+"";
					}
					ergebnis.add(sb.toString());
				}
				}
			}
		}
		return ergebnis;
	}
}
 
Naja, klappt nur, wenn aus dem HTML-Kod schon alle " entfernt sind. Müsste wissen, wie/als was das Zeug aus der Zwischenablage im Java-Kod anzutreffen ist.
 
Mit RegEx wirst du, je nach dem was du vorhast bei HTML an die Grenzen stoßen.
HTML (bzw. XML) ist nämlich nicht regulär (RegEx = Regular Expressions), sondern kontextfrei.
Dafür würde sich zum Beispiel ein Kellerautomat besser eignen.
 
@frapo thx, hilft mir aufjedenfall weiter 😉

@noobadix,

bua guter Gedanke die <> und was zwischen dehnen ist zu löschen 😉

vielen vielen dank.
 
Probiere mal
Java:
s.replaceAll("<.*?>", "");

Das funktioniert wunderbar, solange die HTML-Tags keinen Zeilenumbruch beinhalten. Hast du da auch noch ne Idee? Ich hab versucht nach selbem Prinzip alle " " oder "\n" rauszuholen, aber geklappt hat's nicht.
 
Mit diesen Pattern/Matchern wollt ich nix zu tun haben...aber nach diesen freundlichen Tutorials ging es dann doch:
Java Regular Expressions

regex über mehrere Zeilen - Java @ tutorials.de: Forum, Tutorial, Anleitung, Schulung & Hilfe

Ergebnis:
Java:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.awt.Toolkit; 
import java.awt.datatransfer.*;

class testing{
	public static void main(String[] args){
		Clipboard systemClipboard;
		systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
		Transferable transferData = systemClipboard.getContents( null );
		for(DataFlavor dataFlavor : transferData.getTransferDataFlavors()){
			Object content = "";
		    try{
		    	content = transferData.getTransferData( dataFlavor );
		    }
		    catch(Exception e){}
		    if ( content instanceof String ){ 
		    	String contentString = (String) content;
		    	Pattern patt = Pattern.compile("<.*?>",Pattern.DOTALL);
		    	Matcher matcher = patt.matcher(contentString);
		    	while(matcher.find()){
		    		contentString = contentString.replace(matcher.group(), "");
		    	}
		    	System.out.println(contentString);
		        break;
		     }
		}
	}
}
 
Zuletzt bearbeitet von einem Moderator:
@Ice-Breaker:
Abgesehen von Kommentaren, was kann in HTML sonst noch schief gehen?
 
Ich hätte übrigens noch einen solchen Ansatz, wenn Du das probieren möchtest. Weiß aber nicht, ob das für Dich sinnvoll ist:
Java:
final HTMLEditorKit kit = new HTMLEditorKit();
try {
  final Document doc = kit.createDefaultDocument();
  kit.read(new StringReader("<html><body>Huhu<p>Test</body></html>"),
        doc, 0);
  System.out.println(doc.getText(0, doc.getLength()));
} catch (Exception ex) {
  ex.printStackTrace();
}
Ebenius
 
Ich kann dir, wie Ebenius, auch SWING Empfehlen. Anbei das ganze in eine Klasse gepackt:

Java:
public class StringFilterHTML extends HTMLEditorKit.ParserCallback {
	StringBuffer s;

	public void parse(Reader in) throws IOException {
		s = new StringBuffer();
		ParserDelegator delegator = new ParserDelegator();
		delegator.parse(in, this, true);
	}

	public void parse(String string) throws IOException {
		StringReader in = new StringReader(string);
		s = new StringBuffer();
		ParserDelegator delegator = new ParserDelegator();
		delegator.parse(in, this, true);
	}

	public void handleText(char[] text, int pos) {
		s.append(text);
	}

	public String getText() {
		return s.toString();
	}

	public static void main(String[] args) {
		try {
			// the HTML to convert
			String html = "<HTML><HEAD></HEAD><BODY><b>Hello</b>&nbsp;World!<br></BODY></HTML>";
			StringFilterHTML parser = new StringFilterHTML();
			parser.parse(html);
			System.out.println(parser.getText());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

Habe gute Erfahrung damit gemacht. Aber dass es immer mal Probleme mit nicht validem HTML geben wird, wirst du wohl nicht umgehen können.

Ben
 
Hab da noch so nen Gedanken:
Könnte man vielleicht einen Browser auf Java-Basis, wenn es sowas gibt, aufbrechen und den, ich sag mal, stream, der zur Anzeige geht, also den interpretierten HTML-Kod, abfangen und diesen dann auf < und > untersuchen?

edit: den hier hab ich auf Anhieb gefindet: Lobo Project Java Source Code
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben