Durchzählen eines Strings

Status
Nicht offen für weitere Antworten.

sb15420

Mitglied
Hi,

ich hab folgendes Problem: Ich möchte von einem String einen bestimmten Buchstaben (k) zählen, also wie oft dieser im String vorkommt.
Ich habe es schon folgendermaßen versucht, aber irgendwas ist da falsch:
(string ist der String, i der Zähler und kzaehler der Zähler des Buchstabens

for (i=0; i<string.length; i++)
if (string.charAt(i).equals("k")) kzaehler++;

Ich weiß nicht wie ich sonst noch einen String auf einen bestimmten Buchstaben durchsuchen kann:
Über Hilfe würd ich mich freuen.

Grüße sb15420
 
um es mit der gleichen Technik wie du zu machen, dieser Code funktioniert:
Java:
for (i=0; i<string.length; i++) {
    if (string.charAt(i) == 'k') {
        kzaehler++;
    }
}
Der Grund dafür ist, dass charAt() einen primitiven Datentyp zurück gibt, welchen man nicht mit .equals() prüfen muss (wenns gemacht wird wird wohl in einen Char autogeboxt -> und ein Char 'k' != String "k").
 
Hallo!

Da ich auch gerne Buchstaben zähle kann ich meine Frage ja direkt hier stellen. 😀
Mein Problem ist das ich nicht wie der Threadersteller nur einen Buchstaben in einem Wort zählen möchte sondern alle Buchstaben die in einem Wort vorkommen.

Leider musste ich feststellen das meine Lösung zwar funktioniert jedoch ziemlich viel Schreibarbeit verursacht. Meine Lösung ist das ich für jeden Buchstaben des Alphabets eine Zählvariable deklariere und eine if-Anweisung. Da unser Alphabet leider viele Buchstaben hat ist der Code dementsprechend lang.
Ich würde einfach nur gern wissen wie ich den Code vereinfachen kann.

Java:
public class BuchstabenZaehlen {

    public static void main(String[] args) {

        String wort = "hallo";
        int countera = 0, counterb = 0, counterc = 0, counterd = 0, countere = 0, 
            counterf = 0, counterg = 0, counterh = 0, counteri = 0, counterj = 0,
            counterk = 0, counterl = 0, counterm = 0, countern = 0, countero = 0,
            counterp = 0, counterq = 0, counterr = 0, counters = 0, countert = 0,
            counteru = 0, counterv = 0, counterw = 0, counterx = 0, countery = 0,
            counterz= 0;

       
        for (int j=0; j<= wort.length()-1; j++) {
        
        if (wort.charAt(j) == 'a') {
            countera++;
            }
        if (wort.charAt(j) == 'b') {
            counterb++;
            }
        if (wort.charAt(j) == 'c') {
            counterc++;
            }
        if (wort.charAt(j) == 'd') {
            counterd++;
            }
        if (wort.charAt(j) == 'e') {
            countere++;
            }
        if (wort.charAt(j) == 'f') {
            counterf++;
            }
        if (wort.charAt(j) == 'g') {
            counterg++;
            }
        if (wort.charAt(j) == 'h')  {
            counterh++;
            }
        if (wort.charAt(j) == 'i') {
            counteri++;
            }
        if (wort.charAt(j) == 'j') {
            counterj++;
            }
        if (wort.charAt(j) == 'k') {
            counterk++;
            }
        if (wort.charAt(j) == 'l') {
            counterl++;
            }
        if (wort.charAt(j) == 'm') {
            counterm++;
            }
        if (wort.charAt(j) == 'n')
            countern++;
        if (wort.charAt(j) == 'o')
            countero++;
        if (wort.charAt(j) == 'p')
            counterp++;
        if (wort.charAt(j) == 'q')
            counterq++;
        if (wort.charAt(j) == 'r')
            counterr++;
        if (wort.charAt(j) == 's')
            counters++;
        if (wort.charAt(j) == 't')
            countert++;
        if (wort.charAt(j) == 'u')
            counteru++;
        if (wort.charAt(j) == 'v')
            counterv++;
        if (wort.charAt(j) == 'w')
            counterw++;
        if (wort.charAt(j) == 'x')
            counterx++;
        if (wort.charAt(j) == 'y')
            countery++;
        if (wort.charAt(j) == 'z')
            counterz++;
        
            }
   System.out.println(counterh + " " + countera + " " + counterl + " " + countero);

            }
}


Falls sich jemand durch die fehlenden bzw. gesetzten Klammern bei den if-Anweisungen gestört fühlt dem sei gesagt nach einiger Zeit hatte ich keine Lust mehr Klammern zu setzen, oder zu entfernen.
 
hier mal ein angedachtes Bsp, wie man es etwas vereinfachen könnte.

Allerdings sind hier nur die "normalen" 26 Buchstaben berrücksichtigt, wenn du Zahlen, "ß","ä" o.ä. eingibst, schmeißt er eine ArrayIndexOutOfBoundsException...Groß- und Kleinschreibung werden auch nicht berücksichtigt.

ist -wie gesagt- auch nur angedacht...^^

Java:
public class BuchstabenZaehlen {

	public static void main(String[] args) {

		String wort = "AFabbGEDSvvssccHTDHKBdwerSDthEdsGzzuiopplokjfhSDFSDdsbvcbxnymalsdfgeewetz";
		int[] buchstabenArray = new int[26];

		wort = wort.toLowerCase();

		for (int j = 0; j <= wort.length() - 1; j++) {

			Character c = wort.charAt(j);
			buchstabenArray[c.hashCode() - 97]++;
		}

		for (int i = 0; i < buchstabenArray.length; i++) {
			if (buchstabenArray[i] != 0) {
				System.out.println("Der Buchstabe \""
						+ new String(Character.toChars(i + 97)) + "\" kommt "
						+ buchstabenArray[i] + "x vor. (" + (i + 1)
						+ ".Buchstabe)");
			}
		}
	}
}
 
Das geht doch auch mit der erweiterten For-Schleife. Kann die vlt kemand reinstellen, da ich die noch nicht wirklich behersche und ich keine falschen Infos geben will
 
wenn du "Das..." auf meinen Code, bzw. meine Idee beziehst, lautet die Antwort nein.

denn die erweiterte For-Schleife besitzt keinen Laufindex, der bei meinem Code gebraucht wird...
 
Ich mein das eigentlich gar nicht auf deinen Code bezogen, sondern eher auf die Ideen dadrüber. Das sieht mir irgendwie sehr umständlich aus. Man könnte den String doch mit:
Java:
wort.toCharArray()
zu einem CharArray machen, ihn durchzählen und danch wieder zu einem String machen, oder?
 
wieso nachher wieder zu einem string array? man könnte es einfach so machen:

Java:
int[] vorkommen = new int[255];
for (char c : text.toCharArray()) {
  vorkommen[c]++;
}

lg
 
Zum ersten: Ich würde das in einer Map<Chararacter, Integer> speichern. Also Buchstabe suchen mit get(), counter erhöhen und wieder abspeichern mit put(). Das alles in eine Klasse eingepackt, z.B. namens CharCounter, dort gibt es eine Methode Map<Chararacter, Integer> count(String s) die zu einem String alle Buchstabenvorkommen zurückliefert.

Zum zweiten: Wenn Du die erste Klasse geschrieben hast, kannst Du eine zweite erzeugen, die mit einer Map<String, CharCounter> arbeitet. Sie hat ebenfalls eine Methode count(String words), die diese Map zurückliefert. Die Map speichert zu Wörtern CharCounts und schon bist Du fertig. Du mußt nur den String durchparsen, um Wörter zu finden und die jeweils mit dem CharCounter behandeln.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben