查找具有多行的文本文件的中间字长

时间:2015-03-01 15:54:44

标签: java file-io

我有一个文本文件,我想找到整个文件的中间字并打印它拥有的字符数。我可以为一行做到这一点:

 System.out.println("'" + str[tok / 2] + "'");

但我不知道如何指向某一行。这是我的所有代码:

import java.io.*;
import java.text.*;
import java.util.*;

public class AmendClassify {

  public static void main(String[] args) {
      try {
        System.out.println("Please enter the file name:");
        Scanner sc = new Scanner(System.in);
        String file = sc.next();
        file = file + ".txt";
        Scanner s = new Scanner(new FileReader(file));

        System.out.println("You are scanning '" + file + "'");

        PrintWriter output = new PrintWriter(new FileOutputStream("output.txt"));

        double lineNum = 0;
        double wordCount = 0;
        double charCount = 0;
        int tok = 0;
        String str[] = null;
        DecimalFormat df = new DecimalFormat("#.#");

        String line = null;
        while (s.hasNextLine()) {
          line = s.nextLine();
          lineNum++;

          str = line.split((" "));
          tok = str.length;
          for (int i = 0; i < str.length; i++) {
            if (str[i].length() > 0) {
              wordCount++;
            }
          }
          charCount += (line.length());
        }
        double density = (charCount / wordCount);


        System.out.println("'" + str[tok / 2] + "'"); // middle word of the 1st/last line

        gap();
        System.out.println("Number of lines: " + lineNum);
        System.out.println("Number of words: " + wordCount);
        System.out.println("Number of characters: " + charCount);
        gap();
        System.out.println("The DENSITY of the text is: " + df.format(density));
        System.out.println();

        int critical;
        System.out.println("Do you want to alter the critical value(Y/N)");
        String answer = sc.next();

        if (answer.equals("y") || answer.equals("Y")) {
          System.out.println("Please enter a value: ");
          critical = sc.nextInt();
        } else {
          critical = 6;
        }

        //So...
        if (density > critical) {
          System.out.println("NAME: '" + file + "'" + ", DENSITY: " + df.format(density) + ", TYPE: " + "Heavy");
        } else {
          System.out.println("NAME: '" + file + "'" + ", DENSITY: " + df.format(density) + ", TYPE: " + "Light");
        }

        System.out.print("--FINISHED--");
        s.close();
        output.close();
        sc.close();

      } //end of try
      catch (FileNotFoundException e) {
        System.out.println("Please enter a valid file name");
      }
    } // end of main

  public static void gap() {
    System.out.println("------------------------------");
  }
}

我用来测试的文本文件是

Hello my name is Harry. This line contains 83 characters, 15 words, and 1 line(s). This is the second line.

This is the third line.

This is the fourth line.

1 个答案:

答案 0 :(得分:0)

由于这看起来像是家庭作业,我建议您将整个文件读入String,然后根据需要删除replaceAll()的所有换行符(具体取决于您的阅读方式)将整个文件转换为String)。然后,您将有效地拥有一行...所以您现有的代码将起作用(考虑到如果文件具有偶数,中间字实际上将是中间左侧的字()。

请注意,这不是最佳解决方案。不要在工作中使用它。