Zeichen und mehrfach vorkommende Wörter entfernen

kurwajebana

Grünschnabel
hallo ich habe folgenden String :
Code:
String str = "\\[\\[AntarktisAntarktis\\]\\]".replaceAll("[_[^\\w\\däüöÄÜÖ\\+\\- ]]", "");

Die Ausgabe ist wie erwartet
Code:
AntarktisAntarktis

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


Es sollte natürlich auch mit disen String klappen können:
Code:
String str= "HundKatzeHundHund\nKatze Hund"
so dass die Ausgbe dann nur:
Code:
 Hund Katze
ist, mit leerzeichen dazwischen, wohlgemerkt!
Danke schon mal im voraus
 
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.

Java:
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);
	}
 
Mit regulären Ausdrücken sollte es einfacher gehen...

Java:
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 ;-)
 
Zuletzt bearbeitet:
Mit regulären Ausdrücken sollte es einfacher gehen...

Java:
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 ;-)

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.

Java:
	      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.
 
Ich glaube die die Frage wurde nicht richtig verstanden.
Also wir haben ein String:
Code:
 String teststring = "!§$%&/()HalloHalloDasIstIstEinString.,:;:;";
Die Ausgabe soll ganz einfach so assehen:
Code:
Hallo Das Ist Ein String
 
Was bitte ist der tiefere Sinn davon? Der Hintergrund dazu würde mich brennend interessieren....

Hier noch mal ein schneller Hack!

Java:
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

Code:
Hallo Das Ist Ein String
 
Zuletzt bearbeitet:
Zurück