Buchstaben aus String herausfiltern

Status
Nicht offen für weitere Antworten.
R

Reap

Gast
Hallo stehe gerade vor einem Problem

Und zwar will ich aus einem String (z.b. aaaaddddfffffggggg)


in einem neuen String nur adfg herausfiltern scheitererte aber bis jetzt immer
Und bitte keine vorgefertigten Methoden angeben.

Code:
IO.write("Geben Sie einen beliebige Buchstaben ein: ");
String text = IO.readLine();	
StringBuffer b = new StringBuffer(text);

StringBuffer e = new StringBuffer(text);
int i = 0;
int j = 1;
int help = 0;
	
while(i <= e.length() - 1){

while(j <= b.length() - 1){

if(e.charAt(i) == b.charAt(j)){
	if(j==1);
    else 
    e.delete(j-1,j);
}
j++;
}
i++;
j = 0;
}

text = e.toString();
IO.write(text);

[Edit by foobar: Codetags eingefügt]
 
R

Reap

Gast
Danke für den Tip

und wie gehe ich nun vor wenn ich ich z.b. AAABBBAAA habe und ich will trotzdem als Ausgabe

A3B3 haben?
 

foobar

Top Contributor
Ich würde die einzelnen Buchstaben als Key in einer HashMap ablegen und bei entsprechender Übereinstimmung den Value inkrementieren.
 
R

Reap

Gast
Ich versteh nur Bahnhof


Bin gerade im Buch bei Kapitel Strings
Muss also irgendwie auch mit StringBuffer gehen
 

foobar

Top Contributor
Muss also irgendwie auch mit StringBuffer gehen
Klar, TIMTOWTDI :)

Code:
import java.util.*;
import java.util.Map;

public class StringParser
{
	public void parse(String input)
	{
		Map chars = new HashMap();
		for (int i = 0; i < input.length(); i++)
		{
			char c = input.charAt(i);
			if (chars.get(new Character(c)) == null)
			{
				chars.put(new Character(c), new Integer(1));
			}
			else
			{
				Integer value = (Integer) chars.get(new Character(c));
				chars.put(new Character(c), new Integer( (value.intValue()+1 ) ));
			}
		}
		this.printMap( chars );
	}
	
	private void printMap(Map chars)
	{
	   for (Iterator it = chars.keySet().iterator(); it.hasNext();)
	   {
	       Object key = it.next();
	       System.out.print(key + "" + chars.get( key ));
	   }
	   
	}

	public static void main(String[] args)
	{
		new StringParser().parse("AAAABBBAAC");
	}
}
 

Sindbad1983

Top Contributor
ich möchte das ein bissl einfacher lösen...nur das Problem, das ich hab ist Folgendes:

wie kann man sich den Buchstaben merken, der schon gezählt wurde??

also bei AABBA ....da zählt er ALLE A , also insgesamt 3mal(läuft er gesamten StringBuffer durch)..dann fängt er wieder von vorne an(alle A hat er jetzt gezählt) doch wie weiß er jetzt, dass bei den ersten 2 Stellen schon A waren ->d.h. dass er erst bei der 3.Stelle wieder weiterzählen muss?? D.h. dass er jetzt alle A ignorieren muss? Und beim nächsten Durchlauf alle A und B etc. etc. ...Wie geht das?
Oder ist der Ansatz komplett falsch?
 

foobar

Top Contributor
wie kann man sich den Buchstaben merken, der schon gezählt wurde??

also bei AABBA ....da zählt er ALLE A , also insgesamt 3mal(läuft er gesamten StringBuffer durch)..dann fängt er wieder von vorne an(alle A hat er jetzt gezählt) doch wie weiß er jetzt, dass bei den ersten 2 Stellen schon A waren ->d.h. dass er erst bei der 3.Stelle wieder weiterzählen muss?? D.h. dass er jetzt alle A ignorieren muss? Und beim nächsten Durchlauf alle A und B etc. etc. ...Wie geht das?

Deshalb habe ich eine HashMap verwendet, damit ist das ganz einfach. Du könntest alternativ auch einen Vector verwenden, dann müßtest du den aber jedesmal parsen um zu überprüfen, ob sich der entsprechende Char schon darin befindet.
 

Sindbad1983

Top Contributor
ich find es echt toll, dass du dir die Zeit nimmst und das Beispiel für uns programmierst, aber dein Source-Code ist mir leider zu steil! Deshalb hab ich mir gedacht, ich lös das auf "einfachere" Weise, aber das dürfte wohl leider nicht möglich sein!
 

Wildcard

Top Contributor
Würde sagen das ist die einfachste Lösung. Wenn du mit einfacher meinst auf die Map
verzichten, dann ist das natürlich möglich, aber viel komplizierter.
Deshalb eine kurze erklärung:
Eine Map speicher Key/Value paare, also hier einen Character als Schlüssel, und ein
Integer als wert wie oft der Character vorkommt.
- Sieh dir Zeichen für Zeichen im String an
- Wenn das aktuelle Zeichen noch nicht in der Map ist, setzte es mit Wert '1' rein.
- ansonsten überschreibe den alten Eintrag mit einem Wert der um eins erhöht ist.

Ganz simpel, oder?
 

foobar

Top Contributor
So kompliziert ist der Code gar nicht. Hier ist eine kommentierte Version:
Code:
import java.util.*;
import java.util.Map;

public class StringParser
{
   public void parse(String input)
   {
      Map chars = new HashMap();      // speichert die einzelnen chars als Key und die Anzahl ihres Vorkommens als Value
      for (int i = 0; i < input.length(); i++) // String bis zum letzen Zeichen durchlaufen
      {
         char c = input.charAt(i);  // akutellen char des Strings an Position i als char abspeichern
         if (chars.get(new Character(c)) == null)   // wenn der char noch nicht in der HashMap gespeichert wurde, 
         {
            chars.put(new Character(c), new Integer(1));  // neuen char hinzufügen mit einem Startwert von 1
         }
         else  // falls der char schon enthalten ist 
         {
            Integer value = (Integer) chars.get(new Character(c));   // den aktuellen char aus der HashMap holen 
            chars.put(new Character(c), new Integer( (value.intValue()+1 ) ));  // den Value um eins erhöhen und wieder speichern
         }
      }
      this.printMap( chars );  // HashMap auf der Konsole ausgeben
   }
   
   private void printMap(Map chars)
   {
      for (Iterator it = chars.keySet().iterator(); it.hasNext();)  
      {
          Object key = it.next();
          System.out.print(key + "" + chars.get( key ));
      }
      
   }

   public static void main(String[] args)
   {
      new StringParser().parse("AAAABBBAAC");
   }
}

http://java.sun.com/j2se/1.4.2/docs/api/java/util/HashMap.html
 

Sindbad1983

Top Contributor
Hm, das ist ziemlich genial!
:applaus: Jetzt isses mir wesentlich klarer! :idea:

Aber warum

Code:
  else  
         { 
            Integer value = (Integer) chars.get(new Character(c));   
            chars.put(new Character(c), new Integer( (value.intValue()+1 ) ));  
         } 
      }

sag ich hier wieder new Character (c) ??..ich mein, dass ich den value dann um 1 erhöhen muss ist klar, aber mit new wird ja ein neuer Buchstabe erzeugt oder nicht?

Danke für eure Hilfe!
ciao,Tommy
 

foobar

Top Contributor
Der char muß wieder mit einem Wrapper verpackt werden, da man in einer HashMap lediglich Objects speichern kann.
 
B

bygones

Gast
nicht wirklich... die Hashmap überprüft ob "das gleiche" Objekt schon in der map vorhanden ist (in dem Fall ist es gleich, wenn die Method equals true zurückliefert bzw. der Hashcode übereinstimmt. und das ist bei gleichem char der Fall).

Man könnte das ganze noch ein bisschen verbessern, in dem man beim charAt(i) das ganze einmal zum Character erstellt und dann einfach mit dem Objekt testet und nicht immer neu erstellt !!

noch besser ist es ab Java5 weil dann die valueOf Methoden verwendet werden können
Code:
Character c = Character.valueOf('c');
Integer i = Integer.valueOf(1);

achja - nachtrag - da die valueOf methoden erst ab java5 existieren, schreiben viele nicht ein Wrapper Objekt in die map sondern einen 1elementigen Array. Die Folge ist man muss nicht ein neues Objekt erzeugen
 

foobar

Top Contributor
achja - nachtrag - da die valueOf methoden erst ab java5 existieren, schreiben viele nicht ein Wrapper Objekt in die map sondern einen 1elementigen Array. Die Folge ist man muss nicht ein neues Objekt erzeugen
Super Idee :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
BeginnerJava String mit vorgegebener Länge und Buchstaben erzeugen/ mit Leerstellen Java Basics - Anfänger-Themen 8
C In String, Buchstaben ersetzen durch andere Buchstaben Java Basics - Anfänger-Themen 26
R Mehrere Buchstaben aus einem String entfernen Java Basics - Anfänger-Themen 1
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
J Verschieben von Buchstaben in einem String um vorgegebene Anzahl von Zeichen innerhalb eines weiteren String Java Basics - Anfänger-Themen 12
F Buchstaben in einem String vertauschen (Ohne replace) Java Basics - Anfänger-Themen 10
H Anzahl verschiedener Buchstaben im String Java Basics - Anfänger-Themen 41
K String buchstaben auslesen Java Basics - Anfänger-Themen 9
Z Ersten Buchstaben eines Elements eines String-Arrays auslesen Java Basics - Anfänger-Themen 5
Bregedur String beim nächstem groß geschriebenen Buchstaben trennen Java Basics - Anfänger-Themen 1
S String ab dem Wechsel Buchstaben zu Zahlen splitten Java Basics - Anfänger-Themen 14
M String überprüfen ob nur Buchstaben enthalten sind? Java Basics - Anfänger-Themen 10
J Buchstaben aus String einzeln Zählen Java Basics - Anfänger-Themen 12
X String einzelne Buchstaben ersetzen Java Basics - Anfänger-Themen 4
M Erste Schritte zwei Buchstaben die im String enthalten sind ausgeben Java Basics - Anfänger-Themen 21
S Buchstaben/Wörter im String zählen Java Basics - Anfänger-Themen 6
M String (mit Buchstaben) zu Int Java Basics - Anfänger-Themen 6
H String zerlegen in einzelne Buchstaben (char)?? Java Basics - Anfänger-Themen 7
J Anzahl der Buchstaben in einem String Java Basics - Anfänger-Themen 12
S String Elemente bzw. Buchstaben miteinander vertauschen? Java Basics - Anfänger-Themen 6
V Anzahl eines Buchstaben in einem String zählen Java Basics - Anfänger-Themen 7
T Buchstaben an bestimmter Stelle aus String lesen Java Basics - Anfänger-Themen 5
A eingelesene String in buchstaben teilen Java Basics - Anfänger-Themen 9
A Beliebiger String --> Buchstaben und Zahlen Java Basics - Anfänger-Themen 4
C bestimmte Buchstaben in einem String ändern Java Basics - Anfänger-Themen 5
I Prüfen, ob String Buchstaben enthält Java Basics - Anfänger-Themen 3
C X. Buchstaben aus String auslesen Java Basics - Anfänger-Themen 3
G String buchstaben in Zahlen umwandeln Java Basics - Anfänger-Themen 5
T den 1. Buchstaben im String -> Großbuchstabe? Java Basics - Anfänger-Themen 4
J Buchstaben vergleichen (String) Java Basics - Anfänger-Themen 8
R Bestimmten Buchstaben im String zählen Java Basics - Anfänger-Themen 9
S Zugriff auf einzelne Buchstaben eines String Java Basics - Anfänger-Themen 16
F Zahl aus String (Buchstaben und Zahl) extrahieren Java Basics - Anfänger-Themen 17
D ersetzen eines Buchstaben durch mehrere in String Java Basics - Anfänger-Themen 8
D String lesen und bei bestimmtem Buchstaben stoppen Java Basics - Anfänger-Themen 3
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
L Buchstaben entfernen zipZap Java Basics - Anfänger-Themen 8
S Buchstaben Programmierung Bedeutung Java Basics - Anfänger-Themen 4
H Buchstaben zählen Java Basics - Anfänger-Themen 9
Tom/S KeyCode zu Buchstaben Java Basics - Anfänger-Themen 0
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
Q Besitzen zwei Strings identische Buchstaben, nur in anderer Reihenfolge? Java Basics - Anfänger-Themen 10
J Buchstabenhäufigkeit mit Array und Ausgabe des häufigsten Buchstaben Java Basics - Anfänger-Themen 25
J Buchstaben aus textArea extrahieren Java Basics - Anfänger-Themen 4
S Buchstaben in Großbuchstaben (Strings) Java Basics - Anfänger-Themen 5
O FilterStream häufigkeit der Buchstaben Java Basics - Anfänger-Themen 43
A Erste Schritte Buchstaben im Array suchen Java Basics - Anfänger-Themen 8
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
J Für jeden Buchstaben eine Zahl Java Basics - Anfänger-Themen 1
B Wie kann ich die Buchstaben sortieren nach der Höhe der Zahlen Java Basics - Anfänger-Themen 14
x-tshainge Zahlen Buchstaben zuordnen Java Basics - Anfänger-Themen 4
T Datentypen char als Buchstaben statt als Zahl ausgeben Java Basics - Anfänger-Themen 4
M replace Methode für Buchstaben Java Basics - Anfänger-Themen 29
L Feld mit beliebiger Anzahl von Buchstaben füllen... Java Basics - Anfänger-Themen 5
J Methoden Eingabe Methode nur Buchstaben Java Basics - Anfänger-Themen 4
I Hilfe beim löschen von Buchstaben. Java Basics - Anfänger-Themen 1
I Hilfe beim löschen schon Buchstaben. Java Basics - Anfänger-Themen 4
DestinatioN Problem beim splitten eines Satzes in Wörter und die Wörter in Buchstaben Java Basics - Anfänger-Themen 2
V char Eingabe aber nur für Buchstaben Java Basics - Anfänger-Themen 4
J Zufällige Buchstaben Java Basics - Anfänger-Themen 45
C Klassen Positionszähler auf Buchstaben setzen Java Basics - Anfänger-Themen 14
D Input/Output Buchstaben als bestimmte Zahl erkennen Java Basics - Anfänger-Themen 4
S Input/Output Buchstaben in Eingabe finden und ausgeben Java Basics - Anfänger-Themen 5
R [Erledigt]Fehler beim löschen von einzelnen Buchstaben aus StringBuilder Java Basics - Anfänger-Themen 1
E Input/Output Konsole erkennt meinen Buchstaben nicht Java Basics - Anfänger-Themen 12
F Häufigkeit von Buchstaben Java Basics - Anfänger-Themen 7
L Java Strings Buchstaben vertauschen Java Basics - Anfänger-Themen 4
G Erste Schritte Einen Array absuchen und Buchstaben zählen Java Basics - Anfänger-Themen 17
I Programm, welches eine Textzeile einliest und alle darin enthaltenen Buchstaben umwandelt Java Basics - Anfänger-Themen 3
A Erste Schritte Buchstaben in zahlen umwandeln Java Basics - Anfänger-Themen 4
S Groß bzw. Klein Buchstaben umwandeln (gemischt) Java Basics - Anfänger-Themen 1
S Einzelne Buchstaben aus Jtextfield in array Java Basics - Anfänger-Themen 2
A OOP Buchstaben mit ASCII Werten darstellen Java Basics - Anfänger-Themen 1
E Buchstaben verhindern / Try & Catch Block Java Basics - Anfänger-Themen 3
B Zahlen und Buchstaben in cmd eingeben Java Basics - Anfänger-Themen 5
S nur Buchstaben in JTextField Java Basics - Anfänger-Themen 3
A Erste Schritte Datei einlesen und Buchstaben zählen Java Basics - Anfänger-Themen 13
V Zufallsgenerator für Buchstaben Java Basics - Anfänger-Themen 22
A Erste Schritte konsoleneingabe von Buchstaben Java Basics - Anfänger-Themen 3
M Von File lesen Buchstaben lesen und zählen - scheitert an der Eingabe Java Basics - Anfänger-Themen 4
K Methoden Kontrollstruktur versagt bei Buchstaben... Java Basics - Anfänger-Themen 6
E Buchstaben nach Größe vergleichen Java Basics - Anfänger-Themen 4
M Benennung nach Buchstaben Java Basics - Anfänger-Themen 18
J Programm zum Buchstaben austauschen, logikproblem Java Basics - Anfänger-Themen 2
T keine buchstaben!nur zahlen eingabe möglich Java Basics - Anfänger-Themen 48
P toUpperCase() - Buchstaben die ersetzt werden als Großbuchstaben ausgeben Java Basics - Anfänger-Themen 5
R Regexp nur Buchstaben und Ziffener beliebig oft Java Basics - Anfänger-Themen 3
R buchstaben einlesen - fehlermeldung schreiben? Java Basics - Anfänger-Themen 9
D Buchstaben den jeweiligen Zahlen hinzufügen mit einer if. Java Basics - Anfänger-Themen 6
F Datentypen Zufällige Buchstaben vertauschen Java Basics - Anfänger-Themen 3
K Zahlen und buchstaben gemeinsam in ein array? Java Basics - Anfänger-Themen 17
F Leerzeichen zwischen jeden Buchstaben eines Strings einfügen Java Basics - Anfänger-Themen 16
J Buchstaben zählen Java Basics - Anfänger-Themen 17
R buchstaben zählen Java Basics - Anfänger-Themen 8
R In einem Palindrom 2 Buchstaben vergleichen Java Basics - Anfänger-Themen 16
P Buchstaben: Haeufigkeitstabelle Java Basics - Anfänger-Themen 9
T JTextField max. 8 Zeichen, nur Buchstaben Java Basics - Anfänger-Themen 8
M jeden 2ten Buchstaben aus array Java Basics - Anfänger-Themen 6
C ASCII Codes in Buchstaben umwandeln Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben