# Html tags entfernen optimieren



## Empire Phoenix (24. Dez 2009)

Nunja mein derzeitiges Problem ist, das ich eine Website einlese und dann deren Tags entsorge um sie weiterverarbeiten zu können.
Meine Frage ist jetzt weil diese extrem langsam ist, ob ich die optimieren kann und mir dabei jemand Tips geben kann.
Meine derzeitige Methode sieht so aus:


```
private void removeTags(){
		boolean found = true;
		while(found){
			int start = sitecode.indexOf("<");
			int end = sitecode.indexOf(">",start);
			if(start >= 0 && end > start){
				found = true;
				String first = sitecode.substring(0,start);
				String second = sitecode.substring(end+1);
				sitecode = first + second;
			}else{
				found = false;
			}
		}
	}
```


----------



## faetzminator (24. Dez 2009)

Ich weiss nicht ob es schneller ist, aber ich würde daraus zumindest mal einen Einzeiler machen 

```
sitecode = sitecode.replaceAll("<.*>", "");
```


----------



## Empire Phoenix (24. Dez 2009)

hm was bedeutet das .*? * verstehe ich ja aber .?

Achso funktioniert perfekt Verkürzung um 55sekunden , scheint erheblich schneller zu sein.

Hm aber fazinierenderweise liefert es einen anderes Ergebniss als meine Methode ... seltsam


----------



## HoaX (24. Dez 2009)

faetzminator hat gesagt.:


> Ich weiss nicht ob es schneller ist, aber ich würde daraus zumindest mal einen Einzeiler machen
> 
> ```
> sitecode = sitecode.replaceAll("<.*>", "");
> ```



Ich würde lieber 
	
	
	
	





```
"<.*?>"
```
 nehmen, sonst bleibt von "einer<b> für </b> alle <i>gelle?</i>" nurnoch "einer" übrig.


. bedeutet ein beliebiges Zeichen
* bedeutet das zuvor angegebene Zeichen 0-unendlich oft

-> .* bedeutet egal was und egal wielang
-> <.*> alles was zwischen < und > steht

Da aber * versucht so viel wie möglich zu futtern stoppt es nicht beim ersten, sondern beim letzten >, darum noch das ? dahinter um dies zu ändern.


----------



## faetzminator (24. Dez 2009)

Was ist denn anders? Das ist Regex... [c].[/c] = beliebiges Zeichen (ausgenommen ein paar)


----------



## HoaX (24. Dez 2009)

Anders ist bei mir das ? nach dem *, da sonst, wie gesagt, soviel wie möglich vom * aufgefressen wird, was man bei Tags nicht will, man will ja nur bis zum Nächsten.


----------



## Empire Phoenix (24. Dez 2009)

Danke das mit dem Fragezeichen funktioniert soweit.

Der logik nach müsste doch:

```
sitecode = sitecode.replaceAll("<script.*?></script>", "");
```
dasselbe mit allem was zwischen script tags steht machen oder? (tut es nämlich nicht)


----------



## faetzminator (24. Dez 2009)

Nein, es entfernt die script Tags zusätzlich. Wenn du diese stehen lassen willst, kannst du mit Gruppen arbeiten:

```
sitecode = sitecode.replaceAll("(<script.*?>).*?(</script>)", "$1$2");
```
Falls dies auch über mehrere Zeilen funktionieren soll, kannst du anstatt [c].*?[/c] einfach [c][\\d.]*?[/c] verwenden.


----------



## Empire Phoenix (24. Dez 2009)

will eigentlich schon alles was innerhalb des script tags steht zusammen mit den tags entfernen (wobei die tags nicht so wichtig sind die werden ja eine zeile später eh gekillt)


----------



## mvitz (24. Dez 2009)

dann sollte [c]<script>.*?</script>[/c] funktionieren.


----------



## faetzminator (24. Dez 2009)

...sofern script keine Parameter hat. Ansonsten [c]<script.*?>.*?</script>[/c]


----------



## mvitz (24. Dez 2009)

stimmt ^^ hatte die Parameter ganz vergessen.


----------



## Empire Phoenix (24. Dez 2009)

Super, das ganze funktioniert jetzt, danke dafür an alle und ein frohes Fest


----------

