next up previous contents
Nächste Seite: Analyse der Substitutionschiffre Aufwärts: Häufigkeitsanalysen Vorherige Seite: Häufigkeitsanalysen   Inhalt

Buchstaben zählen ;-)

Eine Zeichenkette aus Klein- und Großbuchstaben (aber ohne Sonderzeichen oder Leerräume) wird hinsichtlich der Buchstabenhäufigkeit analysiert. Im Ergebnis wird zu jedem der 26 Großbuchstaben des Alphabets die Anzahl des Auftretens und eine entsprechend lange * - Reihe ausgegeben:

alfred@duron:~/java/kurs/krypto> java haufigkeit
diesisteintestundinformatikistschoensagteininformatiklehrerdenninformatiklehrerluegennichtsagtderlehrer
A: 5    *****
B: 0
C: 2    **
D: 4    ****
E: 15   ***************
F: 3    ***
G: 3    ***
H: 5    *****
I: 12   ************
J: 0
K: 3    ***
L: 4    ****
M: 3    ***
N: 11   ***********
O: 4    ****
P: 0
Q: 0
R: 10   **********
S: 7    *******
T: 10   **********
U: 2    **
V: 0
W: 0
X: 0
Y: 0
Z: 0

Um dies zu realisieren, verwenden wir bekannte ``Algorithmen'' aus den vorangegangenen Kapiteln:

import java.io.*;

public class haufigkeit {
    public static void main (String[] args) throws IOException {
        BufferedReader eingabepuffer = new BufferedReader(new InputStreamReader(System.in));
        String zeile = eingabepuffer.readLine();
        analyse (zeile);
    }

    public static void analyse(String s) {
        byte[] text = new byte[200];
        int[] anzahl = new int[26];
        int i;
        text = s.getBytes();
        for (i = 0; i < text.length; i++) 
            if (text[i]>90) text[i]-=32;         // Alles nach Großbuchstaben umwandeln
        for (i = 0; i < text.length; i++) 
            anzahl[(text[i]-65)]++;              // und jetzt zählen ;-)
        for (i = 0; i < 26; i++) 
            System.out.println((char) (i+65) + ": " + anzahl[i] + "\t" + stern(anzahl[i]));       // Ergebnis ausgeben
    }

    public static String stern(int anzahl) {
        String s = "";
        for (int i = 0; i<anzahl; i++) s+="*";
        return s;
    }
}

Beachte die Funktion stern(): Sie gibt einen Zeichenkettenwert zurück (und ist daher nicht vom Typ void). Damit kann ihr Wert in der Ausgabe des jeweiligen Zählergebnisses einfach mit den anderen Strings verkettet werden.



Alfred Nussbaumer 2003-02-10