0

私はそれを理解することはできません。プログラムからテキストを書き出そうとしています。ワードカウントプログラムと思われます。行数、文字数、文字数を教えてください。次に、ユーザーが検索している単語とその行と共に結果を表示します。

(つまり、Java を検索する)

5 行目: Java の島には Java が含まれています

9 行目: Java を飲むのが大好きです

テキストを表示していません。象形文字のように表示されます。

2行目: DN{c�<���\$H�Uz�X����h4[����bA.�D��Ja�8^)|��k�ˠ���� <Τ���QJ�����P˒��nI"�(��vc�Bi�"&�/�|qI�W6{pa�0��[���[M��; �FU�! }4�x�����{�-��(����V�k@�We⋅Tʺ 3 行目: �N�U ��������Ӣ ͇�? 4 行目: Ϻ鬵�P��D<�}L> ��o�V�Ex���Q|�)�'��g�I�B�3b�(�"3�T�7�� � ��=��s�g�F�;KN���r��_�� ʺ:�� �B�ۢ�s��sP����[6��; �� PK ! �� � N _rels/.rels �(�

public void readFromFile(String filename)
{
    LineNumberReader lineNumberReader = null;
    try {
        lineNumberReader = new LineNumberReader(new FileReader(filename));
        String line = null;
        BufferedWriter output = new BufferedWriter(new FileWriter("output.txt"));
        String ask = "Enter Word";
        String find = JOptionPane.showInputDialog(ask);    
        Scanner scan = new Scanner(new File("test.txt"));
        while ((line = lineNumberReader.readLine()) != null)
        {
          line = scan.nextLine();
          if(line.indexOf(find) >= -1)
            {
             output.write("Line " + lineNumberReader.getLineNumber() +
                    ": " + line);
             output.newLine();
            }
         }// end of while
        output.close();
        } // end of try
        catch (FileNotFoundException ex)
        {
            ex.printStackTrace();
        } 
        catch (IOException ex)
        {
            ex.printStackTrace();
        } 
    finally {    
        try {
            if (lineNumberReader != null) 
                {
                lineNumberReader.close();
                }
            }  // end of try
        catch (IOException ex) 
            {
            ex.printStackTrace();
            }
         }// end of finally
} // end of function
4

2 に答える 2

1

なぜあなたがこれをしているのかわかりません:

while ((line = lineNumberReader.readLine()) != null)
        {
          line = scan.nextLine();
          if(line.indexOf(find) >= -1)
            {
             output.write("Line " + lineNumberReader.getLineNumber() +
                    ": " + line);
             output.newLine();
            }
         }// end of while

これの代わりに :

while ((line = lineNumberReader.readLine()) != null)
        {
          if(line.indexOf(find) >= -1)
            {
             output.write("Line " + lineNumberReader.getLineNumber() +
                    ": " + line);
             output.newLine();
            }
         }// end of while

これには2人のリーダーは必要ありません。そして、なぜリーダーの1つが最終ファイルを読み込んでいて、もう1つがargに由来する名前のファイルを読み取っているのかわかりません。

于 2012-06-11T14:06:53.347 に答える
0

で設定されているデフォルトの OS エンコーディングが使用されSystem.getProperty("file.encoding")ます。いずれかを明示的に選択できます。

    final String encoding = "UTF-16LE"; // Or "Cp1252" or "UTF-8"

    lineNumberReader = new LineNumberReader(new InputStreamReader(new FileInputStream(filename), encoding));
    ...
    BufferedWriter output = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("output.txt"), encoding));
    ...
    Scanner scan = new Scanner(new File("test.txt", encoding));
于 2012-06-11T13:39:31.510 に答える