2014-03-03 28 views
0

举例来说,如果我有以下文本行的文件:java中如何用扫描仪读取和计数款

这是一个例子。这是一个例子。

这是一个例子。这是一个例子。这是一个例子

这是一个例子这是一个例子这是一个例子这是一个例子这是一个例子这是一个例子这是一个例子这是一个例子这是一个例子这是一个例子。

我希望能够计算这些线为3个段落。现在我的代码会将这段代码记录为4段,因为它不知道段落何时开始和结束。

Scanner file = new Scanner(new FileInputStream("../.../output.txt")); 
int count = 0; 
while (file.hasNextLine()) { //whilst scanner has more lines 
    Scanner s = new Scanner(file.nextLine()); 
    if(!file.hasNext()){ 
     break; 
    } 
    else{ 
     file.nextLine(); 
     count++; 
    } 
    s.close(); 
} 
System.out.println("Number of paragraphs: "+ count); 
file.close(); 

这是我到目前为止。它读取文本行,并将每行视为单个段落。

我想它来治疗那些没有作为1款它们之间的任何空行,然后在文件计数所有段落的文本行。

+0

是一个静态格式的文件?你可以检查一个标签或“\ t”或空白行吗? –

+0

你到目前为止尝试过什么?展示一些自己找到解决方案的工作和/或研究,然后寻求自己无法解决的*特定问题的帮助。 –

+0

不清楚你想要什么。你是否想要统计段落中的单词数量?如果是这样,你如何定义段落的开始和结束?这会让你知道你将如何去做。提示,如果它正在计算你想要的单词,那么Scanner.next()会为你拾取下一个单词。 –

回答

0

扫描仪可能不是最好的选择,如果你只是想计算行。 BufferedReader可能更好。

BufferedReader in = new BufferedReader(new FileReader("output.txt")); 
    String line = in.readLine(); 
    int count = 0; 
    StringBuilder paragraph = new StringBuilder(); 
    while (true) { 
     if (line==null || line.trim().length() == 0) { 
      count++; 
      System.out.println("paragraph " + count + ":" + paragraph.toString()); 
      paragraph.setLength(0); 
      if(line == null) 
       break; 
     } else { 
      paragraph.append(" "); 
      paragraph.append(line); 
     } 
     line = in.readLine(); 
    } 
    in.close(); 
    System.out.println("Number of paragaphs: "+ count);  
+0

但它计数没有问题的罚款线。我只是希望系统能够知道段落是什么,即在一行/多行文本之后是否有空格,那是段落的结尾。 atm它将每一行文本当作段落对待 – JD14

+0

您是否想要将每个段落作为单个字符串来读取?如果你不关心计数,那么你应该从你的例子(和标题)中删除它。 –

+0

如果你想同时使用(count和paragraph),那么就用我的例子加一个StringBuilder来追加每一行,直到你看到一个空行。 –

0

您将无法使用扫描仪查看空格或换行符。 nextLine()方法消除\ n's。

你需要使用一个类和方法读取文件的字节,因此可以检测到空格和换行字符。

尝试使用FileInputStreamread()方法。