2012-10-31 30 views
6

私はテキストファイルを読み込み、それをchar型の配列charに格納しようとしています。私のアプローチ(下記)は、最初の長さ100000の配列charをあらかじめ定義しています(私の主な問題です)。したがって、ファイルにその量よりも少ない文字が含まれている場合(それ以上の文字でも問題があります)、配列にnullがあります。私はそれを避けたい。テキストファイルに存在する文字の量を事前に決定する方法はありますか?あるいは、ファイルcharをcharで格納する方が良い方法がありますか?テキストファイルをJavaのchar配列に読み込む

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 
} 

答えて

5

文字のArrayListを使用して値を受け入れます。

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

私はそれを試みましたが、br.read()メソッドはchar配列のみを受け入れます。 –

+1

br.read()を使用せず、br.readLineを使用して文字列を取得し、string.toCharArray()で文字を抽出します。 – Arham

2

ではなく、スキャナを使用して、次のように

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

として配列への改宗者のArrayListの後あなたは)(代わりにbr.readのbr.readLine()を使用する必要があります!

私はスキャナを使用し、charではなくcharで行を読み取り、それを文字列として格納します。本当に文字配列が必要な場合は、後でそれを取り出す方が簡単です。

これは機能的に同じことを行います。これに

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(); 

利点は、あなたがあなたのために厄介な長さと連結事業のすべてを処理するJavaの文字列型を利用してもらうということです。また、String.toCharArray()メソッドは、必要に応じて自動的にサイズを変更する配列を返すように組み込まれています。

+0

余分な文字「\ n」を追加しています。多分それを取り除くべきでしょう。 – Arham

+0

charをcharで読み込むと、改行ごとに改行文字が返されます。 Scannerは、ラインの内容を必要とし、代わりにヌルで終了するStringを返すと仮定します。その結果、1つの巨大なString(最初の長さが100000であると言われる)が必要な場合は、各行の文字データの間にそれらの文字列を再追加する必要があります。 (Java文字列連結は、追加された文字列の間のヌル終了を取り除きます) 要するに、これは同じ結果を得るために必要な方法です – darkpbj

+0

"\ n"をなぜ明示的に扱わないのですか?あなたはファイル内の内容を知りません。 noOfLines * new_line_charsを配列に追加していますが、ファイルに書き込んだ文字の数だけを必要とします。 1行でプログラムを試してみると分かります。 – Arham

関連する問題