Чтение справки Java из файла - PullRequest
       1

Чтение справки Java из файла

0 голосов
/ 02 декабря 2010

У меня есть часть кода, с которой я просто не знаю, что делать. Предполагается показать диалоговое окно для выбора файла, и когда файл выбран, он выводит результаты в гистограмме. у меня все работает, кроме как я не могу понять, какую переменную мне нужно поместить как text2.

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 

Ответы [ 3 ]

0 голосов
/ 02 декабря 2010

Переместите цикл, который подсчитывает символы, в цикл, где вы печатаете строки. Что-то вроде

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 голосов
/ 02 декабря 2010

Я думаю, что не имеет смысла использовать 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, ваш код будет короче, и ваша программа будет работать быстрее (если можно измерить), потому что ненужная конструкция String отброшена.

PS: несвязанное примечание: убедитесь, что вы обрабатываете случай, когда пользователь нажимает кнопку «Отмена» в диалоговом окне выбора файлов.

PPS: может ли пользователь случайно выбрать каталог вместо подходящего файла в вашей программе?Что будет потом?

0 голосов
/ 02 декабря 2010

просто соберите в переменную text2 внутри цикла while.

         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) {}

ИЛИ

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...