# Zeichen und mehrfach vorkommende Wörter entfernen



## kurwajebana (8. Juni 2007)

hallo ich habe folgenden String :

```
String str = "\\[\\[AntarktisAntarktis\\]\\]".replaceAll("[_[^\\w\\däüöÄÜÖ\\+\\- ]]", "");
```

Die Ausgabe ist wie erwartet 
	
	
	



```
AntarktisAntarktis
```

Wie kann man Wörter, die auch mehrfach vorkommen können, rausfiltern, so dass nur ein Wort im String steht.
Also nur 
	
	
	



```
Antarktis
```


Es sollte natürlich auch mit disen String klappen können: 
	
	
	



```
String str= "HundKatzeHundHund\nKatze Hund"
```
  so dass die Ausgbe dann nur: 
	
	
	



```
Hund Katze
```
 ist, mit leerzeichen dazwischen, wohlgemerkt!
Danke schon mal im voraus


----------



## zeja (8. Juni 2007)

So in der Art. Must halt bei der List schauen ob das schonmal drin ist und dann nicht mehr adden, keine leeren Adden und das ganze dann wieder in nen String umwandeln.


```
public static void main(String[] args) {
		List<String> ss = new ArrayList<String>( );
		String str = "HundKatzeHundHund";
		StringBuilder b = new StringBuilder( );
		for (String s : str.split("")) {
			if (s.toUpperCase( ).equals(s)) {
				ss.add(b.toString( ));
				b.setLength(0);
			}
			b.append(s);
		}
		ss.add(b.toString( ));
		System.out.println(ss);
	}
```


----------



## limago (8. Juni 2007)

Mit regulären Ausdrücken sollte es einfacher gehen...


```
String teststring = "Dies ist ein ein Duplicat";
		
System.out.println(teststring.replaceAll("\\b(\\w+)(\\s+\\1)+\\b",""));
```

EDIT:

Zejas Lösung ist besser. Ich finde nur direkte Wortpaare, aber vielleicht findet ja noch jemand eine entsprechende RegEx Lösung. Fände ich besser ;-)


----------



## jim66 (8. Juni 2007)

limago hat gesagt.:


> Mit regulären Ausdrücken sollte es einfacher gehen...
> 
> 
> ```
> ...



Ich wollte es mit "(\\w+)\\1+" machen, aber das klappt dann bei Strings wie HundHund HundKatzeKatzeHund nicht, kommt halt darauf an, welches Format der Text genau hat.

Zejas Lösung ist die sicherste, allerdings nur, wenn neue Wörter mit Großbuchstaben anfangen. Und das erste Wort ist falsch, da ein leerer String angehangen wird.


```
public static void main(String[] args) {
	 
	              List<String> ss = new ArrayList<String>( );
	              String str = "HundKatzeHundHund";
	              StringBuilder b = new StringBuilder( );
	              for (String s : str.split("")) {
	                  if (s.toUpperCase( ).equals(s)) {
	                	  if(!b.toString().equals(""))ss.add(b.toString( ));
	                      b.setLength(0);
	                  }
	                  b.append(s);
	              }
	              ss.add(b.toString( ));
	              System.out.println(ss);
	          }
```

Wenn jetzt Wörter auch klein anfangen dürfen, wird die Lösung ziemlich aufwendig.


----------



## kurwajebana (8. Juni 2007)

Ich glaube die die Frage wurde nicht richtig verstanden. 
Also wir haben ein String:
	
	
	



```
String teststring = "!§$%&/()HalloHalloDasIstIstEinString.,:;:;";
```
Die Ausgabe soll ganz einfach so assehen: 
	
	
	



```
Hallo Das Ist Ein String
```


----------



## limago (8. Juni 2007)

Was bitte ist der tiefere Sinn davon? Der Hintergrund dazu würde mich brennend interessieren....

Hier noch mal ein schneller Hack!


```
package de.tutorials;

import java.util.ArrayList;



public class StringParser {
	
	private  ArrayList<String> strings = new ArrayList<String>();
	public StringParser() {
		String teststring = "$%&/()HalloHalloDasIstIstEinString.,:;:;";
		StringBuilder builder = null;
		
		for (byte b: teststring.getBytes()) {
			char c = (char) b;
			if (! Character.isLetter(c)  ) continue;
			if (  Character.isUpperCase(c)) {
				writeBuilder(builder);
				builder = new StringBuilder();
			}
			builder.append(c);
		}
		writeBuilder(builder);
		for(String string: strings)
			System.out.print(string);

	}

	private void writeBuilder(StringBuilder builder) {
		if(builder != null)
			add(builder.toString());
	}
	
	private void add(String s) {
		for(String string: strings){
			if(string.equals(s + " " )) return;
		}
		strings.add(s + " ");
	}
	
	
	public static void main(String[] args) throws InterruptedException {
		
		new StringParser();
	}
	
	
}
```
Ausgabe 


```
Hallo Das Ist Ein String
```


----------

