2012-10-31 19 views
6

Ich lese eine Textdatei und versuche, sie in einem Array char von char zu speichern. Mein Ansatz (unten) definiert ein char Array mit einer anfänglichen Länge von 100000 vor (mein Hauptproblem hier). Also, wenn die Datei Zeichen weniger als diese Menge enthält (Problem auch wenn mehr Zeichen als das), dann gibt es Nullen in meinem Array. Ich möchte das vermeiden. Gibt es eine Möglichkeit, die Anzahl der Zeichen in einer Textdatei vorzugeben? Oder gibt es insgesamt einen besseren Ansatz zum Speichern der Datei char by char?Textdatei in ein char-Array in Java lesen

char buf[] = new char[100000]; 
FileReader fr = new FileReader(filename); 
BufferedReader br = new BufferedReader(fr); 
br.read(buf); 
for(int i = 0; i < buf.length; i++) 
{ 
    //Do stuff here 
} 

Antwort

5

Verwenden Sie eine ArrayList von Zeichen, um die Werte zu akzeptieren. Nach dieser convert Arraylist in ein Array als

char[] resultArray = list.toArray(new char[list.size()]); 

sollten Sie verwenden br.readLine() anstelle von br.read() wie folgt:

String str; 
while((str = br.readLine())!=null){ 
     str.tocharArray(); 
} 
+0

Ich habe das versucht, aber br.read() -Methode akzeptiert nur ein Char-Array. –

+1

Verwenden Sie dann nicht br.read(), verwenden Sie br.readLine und rufen Sie die Zeichenfolge ab, und extrahieren Sie dann Zeichen nach string.toCharArray() – Arham

2

Verwenden stattdessen einen Scanner!

Ich würde einen Scanner verwenden und Zeile statt Char von Char lesen und dann als String speichern. Wenn Sie wirklich ein Char-Array möchten, ist es einfacher, es danach zu bekommen.

Diese funktionell macht das Gleiche:

String theString = ""; 

File file = new File("data.txt"); 
Scanner scanner = new Scanner(file); 

theString = scanner.nextLine(); 
while (scanner.hasNextLine()) { 
     theString = theString + "\n" + scanner.nextLine(); 
} 

char[] charArray = theString.toCharArray(); 

Der Vorteil dabei ist, dass Sie die Vorteile von Java Stringtyp nehmen erhalten, die für Sie all die fiesen Länge und Verkettung Geschäft abwickelt. Und die String.toCharArray() -Methode ist bereits eingebaut, um ein Array zurückzugeben, das automatisch so skaliert wird, wie Sie es benötigen.

+0

Sie fügen ein zusätzliches Zeichen "\ n" hinzu. Vielleicht solltest du das entfernen. – Arham

+0

Das Einlesen von Zeichen nach Zeichen gibt für jede neue Zeile ein Zeilenumbruchzeichen zurück. Scanner geht davon aus, dass Sie nur den Inhalt der Zeile wünschen und gibt stattdessen einen nullterminierten String zurück. Das Ergebnis ist, dass Sie, wenn Sie eine gigantische Zeichenfolge (wie von der anfänglichen Länge von 100000 angedeutet) wollen, müssen Sie diese wieder zwischen den Zeichendaten jeder Zeile hinzufügen. (Java String Verkettung wird die Null-Terminierung zwischen angehängten Strings los) Kurz gesagt, das ist, wie Sie es tun müssen, um identische Ergebnisse zu erhalten – darkpbj

+0

Ich sehe immer noch nicht, warum behandeln Sie explizit das "\ n" wann Sie wissen nicht, was in der Datei ist. Sie fügen dem Array noOfLines * new_line_chars hinzu, während man nur die Anzahl der Zeichen haben möchte, die er in die Datei geschrieben hat. Versuchen Sie Ihr Programm mit nur einer einzigen Zeile und Sie würden es verstehen. – Arham