3 Stimmen

Fehler beim folgenden Code zur Implementierung der Häufigkeit

Hallo an alle, ich möchte den Text einer Datei nach ihrer Häufigkeit sortieren. Ich bekomme einen Fehler zur Laufzeit OutOfMemory-Error. Bitte antworten Sie so schnell wie möglich.

import java.io.*; 

import java.util.*;

import java.util.Collections;   

class SortedInAlphaOrder

 {

public static void main(String a[]) throws IOException{

          Scanner input = new Scanner(System.in);

          System.out.println("Geben Sie den Dateinamen mit Pfad ein: " );

          //String filename = input.next();

          File f = new File("Ashish.txt");

          BufferedReader br = new BufferedReader(new FileReader(f));

          StringBuffer buffer = new StringBuffer();

          String str =br.readLine();

          while((str!= null)){

          buffer.append(str);

          buffer.append(" ");

          }

          ArrayList list = new ArrayList();

       StringTokenizer st = new StringTokenizer(buffer.toString().toLowerCase());

          while(st.hasMoreTokens()){

                String s = st.nextToken();

                list.add(s);

                }

            HashSet set = new HashSet(list);

            List arrayList = new ArrayList(set);

            Collections.sort(arrayList);

            for(Object ob : arrayList){

                    System.out.println(ob.toString());

                }

            }           }

Bekomme den Fehler OutOfMemory-Error. Helfen Sie mir bitte.

5voto

Ich denke, ich sehe dein Problem. Du weist str br.readLine() zu, aber deine while-Schleife stoppt nur, wenn str == null. Ich nehme an, dass br.readLine() beim ersten Mal eine nicht-null String zurückgibt, und du überprüfst immer, ob es in deiner while-Schleife null ist. Als Ergebnis hört deine while-Schleife nie auf und du bekommst schließlich einen OutOfMemory-Fehler. Stattdessen solltest du deinen Code so ändern (nicht getestet).

// ...anderer Code
String str;
while((str = br.readLine()) != null){
      buffer.append(str);
      buffer.append(" ");
}
// ...anderer Code

0voto

mtk Punkte 12330

Sie scheinen sehr redundante Dinge zu tun. Sie sollten die Wörter direkt in eine Sammlung aufnehmen und die Sortierung auf ihnen ausführen.

In jedem Fall können Sie das gleiche Programm immer mit erhöhtem Speicher ausführen, indem Sie die Option -Xmx128M angeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X