在计算文本文件中的单词时,跳过字符串的前几个单词

时间:2013-05-30 23:07:50

标签: java io

我正在尝试计算文本文件中具有以下格式的单词数量:

TITEL####URL####ABSTRACT\n
TITEL####URL####ABSTRACT\n
TITEL####URL####ABSTRACT\n
像这样:

 Available line####http://en.wikipedia.org/wiki/Available_line####In voice,
 Marwan al-Shehhi####http://en.wikipedia.org/wiki/Marwan_al-Shehhi####Marwan etc.
 Theodore Beza####http://en.wikipedia.org/wiki/Theodore_Beza####Theodore Beza etc.

我计算单词的代码如下:

    public static int countTotalWords() {
    totalWords = 0;

    try {
        FileInputStream fis;
        fis = new FileInputStream(fileName);


        Scanner scan = new Scanner(fis);

        while (scan.hasNext()) {
            totalWords++;
            scan.next();
        }
    } catch (FileNotFoundException ex) {
        Logger.getLogger(Opgave1.class.getName()).log(Level.SEVERE, null, ex);
    }
    return totalWords;
}

我认为它有效......

我想只计算摘要中的单词,因此忽略标题和URL。我猜测####可以用来跳过每一行的第一部分,但对于我的生活,我无法弄清楚如何。任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:1)

您可以拆分字符串:

String s = "TITEL####URL####ABSTRACT\n";
String[] tokens = s.split("#+");
String abstractText = tokens[2];

然后计算单词,你可以进一步分裂:

int count = abstractText.split("\\s+").length;

注意:如果您使用Java 7+并且文件不是太大,您也可以阅读:

List<String> lines = Files.readAllLines(file, charset);

答案 1 :(得分:0)

您可以使用lastIndexOf查找上一个####

所以给定一行,你可以跳过前两个参数。

您是否尝试过代码?我不熟悉Scanner(我会假设它允许逐行消费)但看起来你只是计算行数。

答案 2 :(得分:0)

假设您已经修复了4个哈希分隔字符串,您可以使用此代码来计算单词的数量:

   public static int countTotalWords() {
        totalWords = 0;

        try {
            FileInputStream fis;
            fis = new FileInputStream(fileName);


            Scanner scan = new Scanner(fis);

            while (scan.hasNext()) {
                String wordsString = scan.next().substring(str.lastIndexOf("####") + 4, str.length());
                String[] wordsArr = wordsString.split(" ");
                int noOfWords = wordsArr.length;
                totalWords = totalWords + noOfWords;

            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Opgave1.class.getName()).log(Level.SEVERE, null, ex);
        }
        return totalWords;
    }
相关问题