Sortierung von Anzahl der Wörtern in ArrayList

karuchalr

Mitglied
Guten Morgen!
ich hätte eine Frage 😉. Ich habe eine ArrayList, wo ich wörter aus einem Text eingefühgt habe und die Anzahl der Wörter erhöht wenn mehr
al ein Wort im Text war; ich habe meine Eregebnise bekommen und es ist zBp. so :

Nur ein Beispiel:

Haus (4x)
und (8x)
katze(2x)
oder (5x)
mama (6x)
Hase (4x)

Nun möchte ich die Wörtern nach Anzahl , also Häufigkeit sortieren, wiesst ihr wie ich dass machen konnte?
Aus der selbe Liste die Sortierung zu machen?

Vielen Dank!

Java:
import java.io.IOException;
import java.util.*;

public class Varios
{

  public static void main(String[] args)
  {
    String line;
    ArrayList<String> zeilen = new ArrayList<String>();
    ArrayList<String> worterListe = new ArrayList<String>();
    {
      try
      {
        BufferedReader br = new BufferedReader(new FileReader("C:/MarioVargasLlosa.txt"));

        while ((line = br.readLine()) != null)
        {
          zeilen.add(line);
        }
        br.close();

       
        int anzahlWorte;
        int anzahlZeichenOhneBlank;
        int totalzz = 0;
        int totalwo = 0;
       
        for (int i = 0; i < zeilen.size(); i++)
        {
          String zeile = zeilen.get(i);
          anzahlWorte = zeile.split("\\s").length;
          anzahlZeichenOhneBlank = zeile.replace(" ", "").length();
          
         
          totalzz += anzahlZeichenOhneBlank;
          totalwo += anzahlWorte;
        }
        
        for (String wortern :  zeilen)
        {
          wortern.replaceAll("\\p{Punct}","");
                  String []wort = wortern.split("\\s");
                  for(String string : wort)
                  {
                    if (string != null && string.length()> 0)
                      worterListe.add(string);
                                                
                  }
                  
        }
        
        Set<String> unique = new HashSet<String>(worterListe);
        for (String string : unique) {
            System.out.println(string+"  ( "+Collections.frequency(worterListe, string)+" x )");
        }
        
        System.out.println ("\n");
        
        for (String stringwo : worterListe)
        {
          System.out.println(stringwo);
        }  
        System.out.println("===========================");
        System.out.println(" Ergebnis");
        System.out.println("----------");
        System.out.println("zeichen : " + totalzz);
        System.out.println("zeichen : " + totalwo);
                     
      }
      catch (FileNotFoundException e)
      {
        System.out.println(e.getMessage());
      }
      catch (IOException e)
      {
        System.out.println(e.getMessage());
      }

    }
  }
 
  
}
 
Hi 😀, ich bin's noch mal,
nun komme ich nicht mehr weiter, die sortierung hat es funktioniert, nun will ich eine Untersortierung machen, die Worter nach länge sortieren .

wenn so aussieht :

Haus (4x)
und (8x)
katze(2x)
oder (5x)
mama (6x)
Hase (4x)
sucht(2x)
papa (2x)

----
das ist sollte die Sortierung nach Häufigkeit sein
sollte so ausehen :
und (8x)
mama (6x)
oder (5x)
Hase (4x)
Haus (4x)
sucht (2x)
papa (2x)
katze (2x)

Das sollte die Untersortierung : alle mit gleiche Häfigkeit nach länge sortieren.
und dann so:
------------
und (8x)
mama (6x)
oder (5x)
Hase (4x)
Haus (4x)
katze (2x)
sucht (2x)

Ist überhaupt sowas machbar oder bleib das als Fantasie?
Ich habe gedacht ich mache vielleich eine eigene klasse "HfgWort" (Häufigkeit wörtern)
und hier würde ich die Sortierung und die Häufigkeit machen
und dann aus der Main Methode aufrufen.

ich meine 'HfgWort' Klasse hätte ich bis jetzt 😉 nur 2 variabel : allerdings habe
ich gelesen compareTo, equals, und hashCode sollten helfen, aber wie??

Java:
public class HfgWort implements Comparable
{
int anzahl = 0;
String wort ="";

  public int compareTo(Object o)
  {
    
  }
  public boolean equals(Object obj)
  {
    
  }
  public int hashCode()
  {
   
  }
  
}
 
z.B. in der compareTo Methode erst nach Häufigkeit sortieren und wenn diese gleich ist nach Stringlänge sortieren.

Java:
@Override
	public int compareTo(Obcect o) {

if(this.getHäufigkeit < o.getHäufigkeit) return -1
else if(andersrum) return 1;
else {  //beide gleich
      if(this.Stringlänge < o.Stringlänge) return -1 .....
}
 

Zurück
Oben