完成文件类

时间:2017-11-16 14:49:03

标签: java file tokenize

我一直收到错误告诉我lineNumber无法解析为变量?我真的不确定如何解决这个问题。我没有将某个文件导入到有助于此的java中吗?

此外,我如何计算带空格且没有空格的字符数。

此外,我需要一种方法来计算独特的单词,但我不确定哪些是独特的单词。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.ArrayList;
import java.util.List;

public class LineWordChar {
public void main(String[] args) throws IOException {
    // Convert our text file to string
String text = new Scanner( new File("way to your file"), "UTF-8" ).useDelimiter("\\A").next();
BufferedReader bf=new BufferedReader(new FileReader("way to your file"));
String lines="";
int linesi=0;
int words=0;
int chars=0;
String s="";

// while next lines are present in file int linesi will add 1
    while ((lines=bf.readLine())!=null){
    linesi++;}
// Tokenizer separate our big string "Text" to little string and count them
StringTokenizer st=new StringTokenizer(text);
 while (st.hasMoreTokens()){
    s = st.nextToken();
      words++;
// We take every word during separation and count number of char in this words    
      for (int i = 0; i < s.length(); i++) {
          chars++;}
    }
 System.out.println("Number of lines: "+linesi);
 System.out.println("Number of words: "+words);
 System.out.print("Number of chars: "+chars);
}
}
 abstract class WordCount {

/**
 * @return HashMap a map containing the Character count, Word count and
 *         Sentence count
 * @throws FileNotFoundException 
 *
 */
public static void main() throws FileNotFoundException {
    lineNumber=2; // as u want
    File f = null;
    ArrayList<Integer> list=new ArrayList<Integer>();

    f = new File("file_stats.txt");
    Scanner sc = new Scanner(f);
    int totalLines=0;
    int totalWords=0;
    int totalChars=0;
    int totalSentences=0;
    while(sc.hasNextLine())
    {
        totalLines++;
        if(totalLines==lineNumber){
            String line = sc.nextLine();
            totalChars += line.length();
            totalWords += new StringTokenizer(line, " ,").countTokens();  //line.split("\\s").length;
            totalSentences += line.split("\\.").length;
            break;
        }
        sc.nextLine();

    }

    list.add(totalChars);
    list.add(totalWords);
    list.add(totalSentences);
    System.out.println(lineNumber+";"+totalWords+";"+totalChars+";"+totalSentences);

}
}

2 个答案:

答案 0 :(得分:1)

为了让您的代码运行,您必须至少进行两项更改:

替换:

lineNumber=2; // as u want

int lineNumber=2; // as u want

此外,您需要修改main方法,不能在main方法声明中抛出异常,因为它上面没有任何东西可以捕获异常,您必须处理其中的异常:

public static void main(String[] args) {
        // Convert our text file to string
        try {
            String text = new Scanner(new File("way to your file"), "UTF-8").useDelimiter("\\A").next();
            BufferedReader bf = new BufferedReader(new FileReader("way to your file"));
            String lines = "";
            int linesi = 0;
            int words = 0;
            int chars = 0;
            String s = "";

            // while next lines are present in file int linesi will add 1
            while ((lines = bf.readLine()) != null) {
                linesi++;
            }
            // Tokenizer separate our big string "Text" to little string and count them
            StringTokenizer st = new StringTokenizer(text);
            while (st.hasMoreTokens()) {
                s = st.nextToken();
                words++;
                // We take every word during separation and count number of char in this words
                for (int i = 0; i < s.length(); i++) {
                    chars++;
                }
            }
            System.out.println("Number of lines: " + linesi);
            System.out.println("Number of words: " + words);
            System.out.print("Number of chars: " + chars);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

我使用了全局Exception捕获,你可以分开几次捕获,以便分开处理它们。它给了我一个例外,告诉我一个明显的FileNotFoundException,除了你的代码现在运行。

答案 1 :(得分:0)

lineNumber变量应使用datatype声明。

  

int lineNumber = 2; //你想要的

通过设置数据类型,将main方法中的第一行从lineNumber更改为 int lineNumber = 2 ,因为在Java中设置每个变量的数据类型非常重要。