(JAVA) возникают проблемы с подсчетом точного количества строк и других заданных c символов в файлах - PullRequest
0 голосов
/ 28 апреля 2020

ОК, так что у меня есть два файла .txt, один называется "input.txt", а другой - "output.txt". чтобы создать вывод, я должен скопировать текст из ввода, но заменить все пробелы между словами на @ и добавить новую строку со строкой "# NEW_LINE #" после каждой строки исходного текста

, например, если input.txt таков:

the unstoppable marching of time
that is slowly guiding us all towards
an inevitable death 

, тогда output.txt должен выглядеть примерно так:

the@unstoppable@marching@of@time
#NEW_LINE#
that@is@slowly@guiding@us@all@towards
#NEW_LINE#
an@inevitable@death 
#NEW_LINE#

В любом случае, вы поймете, что идея.

Теперь у меня нет проблем с этой конкретной задачей, но затем меня также просят напечатать на экране сообщение, которое показывает общее количество строк текста из обоих файлов, и еще одно, которое печатает общее количество из @ из output.txt. и хотя у меня нет проблем с подсчетом строк, их номера отображаются правильно, но у меня есть проблемы с выяснением @'s ... ill объяснения.

вот часть кода, который я попробовал сначала: [ Кстати, все это происходит в одном классе, без других методов, кроме main, конечно. я думал, что так будет проще idk ?‍♂️?]

  File fsrc=new File("input.txt");         
  File fdes=new File("output.txt");        


  int atCount = 0; //number of @'s
  int lineCountIN=0; //number of input's lines
  int lineCountOUT=0; //number of output's lines

  FileReader fr = new FileReader(fsrc);           
  BufferedReader br =new BufferedReader(fr);

  FileWriter fw = new FileWriter(fdes);
  String s = null;

  while((s=br.readLine())!=null)            
  {
     if ((s.equals(" "))) {
     fw.write(s.replace(" ","@"));
     atCount++; } 
     else fw.write(s);
     fw.write("\n");
     lineCountOUT++;
     lineCountIN++;
     fw.write("#NEW_LINE#");
     fw.write("\n");
     lineCountOUT++;
     fw.flush();  
  }  
  fw.close();

[...]

System.out.println("Total instances of @ characters at output.txt: " + atCount);

сообщение, которое появляется на экране, всегда будет: " Всего экземпляров @ символов в output.txt: 0 ".

позже я заменил блок if-else на блок do-while:

do {
         fw.write(s.replace(" ","@"));
         atCount++; } 
     while ((s.equals(" ")));

, но затем сообщение не возвращается точное число @, на самом деле отображаемое число просто по какой-то причине оказывается равным lineCountIN (например, для файла input.txt с 3 строками итоговое сообщение: «Всего экземпляров @ символы в output.txt: 3 ")

, так что да, это довольно много, я думаю, что я неправильно использую atCount ?? любая помощь может быть оценена <3 </p>

1 Ответ

0 голосов
/ 28 апреля 2020

Ваш подход к нахождению пробелов здесь был неправильным - вместо поиска во всей строке и подсчета каждой строки, вы должны проверить каждый символ и посчитать его

    public static void main(String[] args) {

        String s  = "the unstoppable marching of time\n" +
                "that is slowly guiding us all towards\n" +
                "an inevitable death";
        int countSpace = 0;
        if (s.contains(" ")) {
            for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == ' ') {
                    countSpace++;
                }
            }
            s = s.replace(' ', '@');
        }
        System.out.println(s);
        System.out.println(countSpace);

    }
...