2010-12-01 12 views
0

私はコードのセクションを持っています。私はちょうど何をすべきか分かりません。ファイルを選択するためのダイアログボックスが表示され、そのファイルが選択されると結果がヒストグラフで出力されます。私はtext2としてどのような変数を配置する必要があるのか​​分かりません。ファイルからJavaのヘルプを読む

private int[] countLetters2() 
{ 
    // Count for 26 letters 
    int[] count = new int[26]; 

    //get contents from file 
    chooser.showOpenDialog(null); 
    File f = chooser.getSelectedFile(); 

    try 
    { 
    FileReader fr = new FileReader(f); 
    BufferedReader br = new BufferedReader(fr); 
    String s; 
    while((s = br.readLine()) != null) 
    { 
    System.out.println(s); <------simply to see if the reader and buffer were working 

    } 
    } 
    catch(IOException g) {} 


    String text2 = ; <------------------------------------this is the problem 

    //converts every letter to uppercase 
    text2 = text2.toUpperCase(); 

    //Count occurrence of each letter (case insensitive) 
    for (int i = 0; i < text2.length(); i++) 
    { 
    char character = text2.charAt(i); 

    if ((character >= 'A') && (character <= 'Z')) 
    { 
    count[(int)character - 65]++; // The ASCII for 'A' is 65 
    } 
    } 
    return count; // Return the count array 
+0

ファイル全体または各行のヒストグラフを提供しようとしていますか? –

答えて

0

あなたのwhileループ内のtext2変数に単純に集めます。

  String text2 = ""; 
      try { FileReader fr = new FileReader(f); BufferedReader br = new BufferedReader(fr); String s="" while((s = br.readLine()) != null) { 
text2+=s; 
ystem.out.println(s); 

      } } catch(IOException g) {} 

OR

String s = ""; 
      try { FileReader fr = new FileReader(f); 
      BufferedReader br = new BufferedReader(fr); 
      String tmp; 
      while((tmp = br.readLine()) != null) {    
       System.out.println(s); 
       s += tmp; 
      } } catch(IOException g) {} 

      text2=tmp; 
+0

ループの後にsがnullです。それは動作しません –

+0

それはあなたに直接収集するようにそれを変更しましたtext2 – Greg

0

移動しますが、行を印刷するループにcharacgtersをカウントループ。

private int[] countLetters2() 
{ 
    // Count for 26 letters 
    int[] count = new int[26]; 

    //get contents from file 
    chooser.showOpenDialog(null); 
    File f = chooser.getSelectedFile(); 

    try 
    { 
    FileReader fr = new FileReader(f); 
    BufferedReader br = new BufferedReader(fr); 
    String s; 
    while((s = br.readLine()) != null) 
    { 
    System.out.println(s); 
    //converts every letter to uppercase 
    String text2 = s.toUpperCase(); 

    //Count occurrence of each letter (case insensitive) 
    for (int i = 0; i < text2.length(); i++) 
    { 
     char character = text2.charAt(i); 

     if ((character >= 'A') && (character <= 'Z')) 
     { 
     count[(int)character - 65]++; // The ASCII for 'A' is 65 
     } 
    } 
    } 
    } 
    catch(IOException g) {} 

    return count; 
} 
0

ような何かが私はそれが行毎にファイルを経由して、文字で各行の文字を通過するBufferedReaderを使用するにはほとんど意味がないと思います。これは基本的にすべての文字を繰り返し処理する必要があるため、複雑で非効率的ではありません。これは正確にはReaderの機能です。

あなたは非常にそうようなあなたのルーチンを簡素化できますので、(測定可能な場合)

[...] 

    BufferedReader br = new BufferedReader(fr); 
    for (int c; (c = br.read()) > -1;) { 
     char character = Character.toUpperCase((char) c); 

     if ((character >= 'A') && (character <= 'Z')) { 
      count[character - 'A']++; 
     } 
    } 
} catch (IOException g) { /* this is no good */ } 

return count; 

あなたは完全にtext2を取り除く。この方法は、あなたのコードは短く、あなたのプログラムが速く実行されるの不必要な建設文字列がドロップされます。

P.S .:関連のないメモ:ファイル選択ダイアログでユーザーが「キャンセル」をクリックしたケースを処理するようにしてください。

P.P.S:ユーザーはあなたのプログラム内の適切なファイルではなく、ディレクトリを不注意に選択できますか?その後何が起こるでしょうか?

関連する問題