(JAVA)在计算文件的准确行数和其他特定字符时有问题。

问题描述 投票:0回答:1

好吧,我有两个.txt文件,一个叫 "input.txt",另一个叫 "output.txt".为了创建输出,我必须复制输入的文本,但用@代替所有单词之间的空格,并在原始文本的每一行后添加一个新的字符串 "#NEW_LINE#"。

例如,如果 input.txt 是 this:

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#

总之你懂的.

现在我对这个特殊的任务没有问题,但是我也被要求在屏幕上打印一条信息,显示两个文件中文本的总行数,以及另一条打印输出.txt中@的总行数。虽然我在计算行数时没有问题,它们的数字正确地显示出来,但是我在计算@的时候遇到了问题......我解释一下。

以下是我一开始尝试的部分代码:[btw这整个过程都发生在一个类上,当然除了main之外没有其他方法。我想这样会更简单一些,我不知道💁♂️💅]

  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(例如,对于一个总共有3行的input.txt文件,最后的消息是:"Total instances of @ characters at output.txt: 0"。"output.txt文件中@字符的总实例。 3")

我想我是用错了atCount这个词吧?

java file io bufferedreader
1个回答
0
投票

你寻找空格的方法是不正确的,这里有一个解决方案,而不是在整个字符串中搜索并计算每一行,你必须检查每个字符并计算它。

    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);

    }
© www.soinside.com 2019 - 2024. All rights reserved.