Java Häufigkeit aller Buchstaben eines Strings

phoen1xXx

Cadet 4th Year
Registriert
Okt. 2008
Beiträge
74
Hallo
ich hab folgendes Problem und stehe einfach auf dem schlauch. Hoffe ihr könnt mir helfen

Ich soll in Java einen String einlesen (z.B. Das iST ein StRing zum Testen) und von diesem String sämtliche Buchstaben, die darin vorkommen aufzählen (D = 1, a =1, s=2, S=2, ...) . Mit Berücksichtigung der Groß-Kleinschreibung und leerzeichen als buchstaben betrachten. Anschließend soll dies auf der Cosole grafisch dargestellt werden.

Der Code sollte wenn möglich auch noch leicht durchschaubar sein bzw. mit üblichen mitteln.

Nen Ansatz hab ich mir mal folgendermaßen überlegt:

int zaehler=1;
int index=0;
char buchstaben[]=new char[laengeDerEingabe];


for (int j=0; j < laengeDerEingabe; j++){


for (int i=0; i < laengeDerEingabe-1; i++){

if (eingabeZeichen[j]==eingabeZeichen[i+1]){
zaehler++;
}

}


System.out.print(eingabeZeichen[j]+" = ");
System.out.println(zaehler);
zaehler=0;

}

Also ich überprüfe Buchstabe für Buchstabe will diesen Buchstaben dann in mein Buchstaben Array schreiben und von dort nachher schön ausgeben können jedoch bin ich soweit noch nicht gekommen und habe schwierigkeiten die abbruchbedingungen richtig zu setzen. und ja mir ist klar dass das so noch nicht funktionieren kann ist nur mal als ansatz gedacht. Vielen Dank schonmal im Vorraus
 
Hast du schon mit Maps gearbeitet?

z.B.
Code:
Map<Character, Integer> zaehler = new HashMap<Character, Integer>();
 
Also wenn du schon Container kennst, dann schreit das zählen der Zeichen eigentlich nach einer HashMap.


Nachtrag ...
Auf die schnelle würde ich das ungefähr so machen:
Code:
        String input = "Wo auch immer der String her kommt";
        Map<Character, Integer> charMap = new HashMap<Character, Integer>();
        
        for (int i = 0; i < input.length(); i++) {
            Character key = input.charAt(i);
            if (charMap.containsKey(key)) {
                charMap.put(key, charMap.get(key)+1);
            } else {
                charMap.put(key, 1);
            }
        }
        
        Set<Character> keySet =  charMap.keySet();
        for (Character character : keySet) {
            System.out.println(character + " = " + charMap.get(character));
        }

Vorsicht, wenn das eine Hausaufgae oder ähnliches ist und ihr noch keine Container und kein foreach hattet, dann vergiss mein Beispiel ganz schnell.
 
Zuletzt bearbeitet:
nein leider nicht hab mit java noch wenig erfahrung
 
Hi,
als erstes ich habe gar keine Ahnung von Java, aber ich würde es mit regex versuche.

Sucht und zählt Kleinschreibung $regex(%string,/[a-z]/g)
Sucht und zählt Großschreibung $regex(%string,/[A-Z]/g)
Sucht und zählt Leerzeichen $regex(%string,/s/g)

Du muss dir bei Java die Syntax anschauen und natürlich anpassen!

Hier noch allgemein Referenz http://de.wikipedia.org/wiki/Regulärer_Ausdruck
Hier Java Hilfe http://java.sun.com/developer/technicalArticles/releases/1.4regex/

hoffe könnte dir wenigstens etwas bei deinem Problem helfen :)
 
es sollte schon eine java lösung sein aber trotzdem danke
 
Ok, ohne Maps geht es natürlich auch. Ich nehme an das sind irgendwelche Übungen/Hausaufgaben für Java, daher würde ich von Regular Expressions die Finger lassen.

Ich würde dir zwei einfache Möglichkeiten vorschlagen.

1) Holzhammer-Methode
Mach einen int-Array für alle möglichen Zeichen (a-z, A-Z, 0-9, Leerzeichen, Komma, Punkt) und bei jedem Auftreten zählst du das entsprechende Feld um eins hoch. Bzw. hast du schon mal was von ASCII Codes gehört? Jedem Zeichen ist ein Wert von 0-255 zugeordnet, dann kannst du einfach mit einem Array der Größe 256 arbeiten. Ok, die ersten paar ASCII Codes sind Steuerzeichen, aber das vernachlässigen wir jetzt mal.

2) Sortiere deinen Eingabe-String
Falls du noch nie sortiert hast, dann schau dir Bubble-Sort an, ist ganz einfach. Nachdem der String sortiert ist, also "Das iST ein StRing zum Testen" ==> "DRSSTTaeeegiiimnnnssttuz " brauchst du nur noch mit einer Schleife über den String laufen und solange zwei aufeinanderfolgende Zeichen gleich sind um 1 erhöhen. Also D=1, R=1, S=2, T=2, ...
 
Zuletzt bearbeitet:
Und was wäre an der HashMap nicht elegant? Ist meiner Meinung nach hierfür prädestiniert.
Wenn der Threadersteller das Collection-Framework noch nicht kennt, wäre die Verwendung eines zweidimensionalen Arrays auch praktisch. Ist vielleicht nicht die attraktivste Lsg., aber für den Anfang schadet es nicht, sich zu überlegen, wie man damit eine Lösung implementiert.
 
ein zweidimensionales array brauch ich wohl für die Ausgabe. bin nur noch nicht darauf gekommen wie ich dies dann am besten schreiben soll . werde dann wohl mit den ascii werten arbeiten müssen da ich wohl den typ int benötige.
 
kaikuwe schrieb:
Reguläre Ausdrücke kann man auch in Java nutzen!

Schön. Aber schon mal daran gedacht, dass es sich um Java Übungen handelt?

Er schreibt ja:

PhOeNiX1111 schrieb:
es sollte schon eine java lösung sein aber trotzdem danke
 
Da es zur normalen Java API gehört sehe ich es auch als Java Lösung. Aber im Endeffekt muss er es selber wissen.
Ergänzung ()

Selbst einige String Funktionen wie matches(), replaceAll(), split() - arbeiten mit RegEx. Von daher sehe ich es als Java Lösung an.
 

Ähnliche Themen

G
  • Gesperrt
Antworten
14
Aufrufe
6.485
Green Mamba
G
Zurück
Oben