0

次のプログラムは、という名前のファイルからテキストを読み取り、tes.txtファイル全体で同じウルドゥー語の文字列からプレーンな英語の文字列を分離します。これは、すべての英語の単語の後にスタンプとして機能します。ファイルは次のようになります:(ウルドゥー語の文字列は英語の文字列の後に続きます)

سٹیمپ ختم ہو جاتی ہے

suhail

سٹیمپ ختم ہو جاتی ہے  

gupta

سٹیمپ ختم ہو جاتی ہے

ghazal
سٹیمپ ختم ہو جاتی ہے

Windowsを使用している間、私は次のプログラムをコンパイルします:

import java.io.*;

class checker {
public static void main(String args[]) {
try {
     File f = new File("C:/Users/user/Desktop/tes.txt");
     FileReader reader = new FileReader(f);
     char buffer[] = new char[1024];
     String text = "";
     while( reader.read(buffer) > 0 ) {
        text += buffer.toString();
     }

     String splits[] = text.split("سٹیمپ ختم ہو جاتی ہے");

     for(int i=0;i<splits.length;i++) {
        System.out.println(splits[i]);
     }  
} catch(Exception exc) {
   exc.printStackTrace();
  }
}
}

として。javac -encoding UTF-8 checker.javaしかし、このプログラムを実行すると、として出力が得られます[C@19b49e6。どうしてこれなの ?また、配列から1つの文字列のみを出力します。バッファ配列の長さも確認しましたが、1つであることがわかりました。なぜ1つ(正規表現から分離した後にバッファに入るファイルに複数の文字列がある)ですか?どこで間違えたの?

4

3 に答える 3

0

あなたの間違いは、配列のtoStringがその要素のテキスト表現を提供すると仮定することです。そうではありません。そのためにはjava.util.Arrays.toString(array)が必要です。

また、ファイルに5文字が含まれているとします。5文字を1024文字のバッファに読み込み、1024文字すべてを文字列に追加します。これは1019個のヌル文字です。代わりにBufferedReader.readLine()を使用して、ファイルを文字列またはGuavaのFiles.toString(File file、String charset)に読み込むことをお勧めします-http: //docs.guava-libraries.googlecode.com/git/javadoc/com /google/common/io/Files.html#toString(java.io.File,%20java.nio.charset.Charset

ただし、現在の文字を修正する方法を説明するには、読み取った文字の数を格納し、配列からその数の文字のみを使用する必要があります。それが十分に明確でない場合は、私に知らせてください。コードサンプルを作成します。

于 2012-10-13T01:29:17.953 に答える
0

char buffer[] が文字列に正しく追加されていません。この行を変更してください。

     text += new String(buffer);

※先程の回答失礼します 眠いです。

于 2012-10-13T01:25:09.967 に答える
0

ファイルの内容を適切に読み取っていません。内容を読み取るためのより良い方法は次のとおりです。

 String text = "";
 int readcount=0;
 while((readcount =  reader.read(buffer)) != -1 ) {
    text += new String(buffer, 0, readcount);
 }

 String[] splits = text.split("سٹیمپ ختم ہو جاتی ہے");
于 2012-10-13T03:25:01.453 に答える