Mehrdimensionale Arrays Daten speichern

Loddakwin

Aktives Mitglied
Hallo Leute,

ich muss zwei Methoden schreiben, weiß aber nicht wie ich diese Umsetzen soll.

Die Methode public void analyzeCharPairs(String s) soll den String s (s ist zB eine Zeile der eingelesenen Datei) auf Buchstabenkombinationen untersuchen und die Daten in einer globalen Statistik (z.B. mehrdimensionales Array) speichern. Es sollen nur 2-stellige Kombinationen der Buchstaben a-z gezählt werden. Groß- und Kleinschreibung soll NICHT unterschieden werden. D.h. ax, aX, Ax und AX zählen als gleichwertige Kombinationen. Ungültige Kombinationen, zB mit Sonderzeichen oder Leerzeichen, sollen ignoriert werden. Die dafür notwendige Statistik (z.B. mehrdimensionales Array) ist zusätzlich zu jener aus Teil 1 zu implementieren.

Die Methode public int getFrequencyOfCharPair(char c1, char c2) soll die absolute Häufigkeit der Buchstabenkombination c1c2 zurückgeben, d.h. wie oft kam c1 gefolgt von c2 in den bisher untersuchten Strings vor.

Was ich bis jetzt habe:
Java:
public void analyzeCharPairs(String s) {

        s = s.toLowerCase();
       
        for (int i = 0; i < s.length() - s.length() / 2; i++) {
            int pos = s.charAt(i) - 'a';
            int pos2 = s.charAt(i + 1) - 'a';
            if (pos >= 0 && pos <= 25 && pos2 >= 0 && pos2 <= 25) {
                System.out.print(char mychar = (char) pos + " ");
                System.out.println(pos2);
            }
        }
    }

    // return the absolute frequency of the character combination c1 c2
    public int getFrequencyOfCharPair(char c1, char c2) {

        int maxFrequency = 0;

        for (int i = 0; i < statisticCharPairs.length; i++) {
            for (int j = 0; j < statisticCharPairs[i].length; j++) {
                if()
            }
        }

        return maxFrequency;
    }

Ich hoffe ihr könnt mir weiterhelfen.
Lg
 

Tarrew

Top Contributor
Geht es dir jetzt um die Aufgaben an sich oder um die Speicherung in einem zweidimensionalem Array? Falls es um die Aufgaben an sich geht:

Der erste Teil lässt sich sehr leicht mit einem Matcher machen.
Eigentlich brauchst du nur diesen regulären Ausdruck: "(\\w)\\1{1}" in Verbindung mit einem Matcher.

Und für den zweiten Teil würde sich meiner Meinung nach eine Map anbieten anstatt irgendein zweidimensionales Array.
Du durchläufst deinen String und nimmst alle aufeinanderfolgenden Chars als Key für die Map.

Java:
        String text = "aabbbdefxXbdfFX";
        String lowerCaseCopy = text.toLowerCase();
        Map<String, Integer> map = new HashMap<>();
        for(int i=0; i<lowerCaseCopy.length()-1; i++){
            String key = new StringBuilder().append(lowerCaseCopy.charAt(i)).append(lowerCaseCopy.charAt(i+1)).toString();
           
            //prüfe ob key schon in Map vorhanden. Ja: value inkrementieren; Nein: Neuer Eintrag mit value=1
        }

Deine eigentliche getFrequencyOfCharPair(char c1, char c2) Methode wäre dann sehr simpel.
Einfach wieder die chars konkatenieren und "map.get(key)" aufrufen um die Häufigkeit abzufragen.
 

Tarrew

Top Contributor
Kann meinen Beitrag leider nicht mehr editieren. Mir ist eben eingefallen, dass die 2. Aufgabe mit einem 2d-Array vermutlich noch einfacher ist.
Wenn man den String durchläuft kann man ja einfach jedes Mal den Wert an array[char1][char2] inkrementieren.
 

Neue Themen


Oben