首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BufferedReader指针

BufferedReader指针
EN

Stack Overflow用户
提问于 2011-04-30 18:35:14
回答 3查看 5.7K关注 0票数 0

我有以下代码,但我不明白如何将指针重置到起始位置:

代码语言:javascript
复制
BufferedReader inp=new BufferedReader(new FileReader(file));
Scanner leggi=new Scanner(inp);
for(int i=0;i<nwords;i++){
  while(leggi.hasNext()) 
    if(leggi.next().equals(args[i+2])) 
      occorrenze[i]=occorrenze[i]+1;
}
inp.close();

我试过了

代码语言:javascript
复制
inp.mark(0);
inp.reset();

没有结果。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-30 18:40:51

保罗,

我建议你通读这个老帖子:Java BufferedReader back to the top of a text file?

就我个人而言,我更喜欢Jon Skeet的回答,归根结底就是“除非迫不得已,否则别费心了。”

干杯。基思。

编辑:你也应该关闭输入文件,即使你遇到了异常。finally块非常适合这一点。

EDIT2:

希望你还在我们身边。

这是我的尝试,顺便说一句,你不需要重置输入文件,你只需要转置你的whilefor循环。

代码语言:javascript
复制
package forums;

import java.util.Scanner;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class WordOccurrenceCount
{
  public static void main(String[] args) {
    try {
      String[] words = { "and", "is", "a", "the", "of", "as" };
      int[] occurrences = readOccurrences("C:/tmp/prose.txt", words);
      for ( int i=0; i<words.length; i++ ) {
        System.out.println(words[i] + " " + occurrences[i]);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  private static final int[] readOccurrences(String filename, String... words) 
    throws IOException
  {
    int[] occurrences = new int[words.length];
    BufferedReader reader = null;
    try {
      reader = new BufferedReader(new FileReader(filename));
      Scanner scanner = new Scanner(reader);
      while ( scanner.hasNext() ) {
        String word = scanner.next();
        for ( int i=0; i<words.length; i++ ) {
          if ( words[i].equals(word) ) {
            occurrences[i]++;
          }
        }
      }
    } finally {
      if(reader!=null) reader.close();
    }
    return occurrences;
  }
}

java.util.MapBTW是建立频率表的完美选择。Parallel arrays的“默认”实现是HashMap类……默认情况下,我的意思是只要你需要地图,就使用HashMap,除非你有一个很好的理由去使用其他东西,而其他东西不会经常使用。HashMap通常是最好的全能表演者。

票数 1
EN

Stack Overflow用户

发布于 2011-04-30 18:41:56

您有两个选择:

改为使用bufferedreader.

  • use标记重置标记( FileReader (FieldReader.reset) )并创建新的标记功能(尝试使用

我想你尝试的是在你读完输入后调用mark。相反,请执行以下操作:

代码语言:javascript
复制
inp.mark(readAheadLimit);    
// .... all your code processing input
inp.reset();
票数 0
EN

Stack Overflow用户

发布于 2011-04-30 18:42:47

mark(int readAheadLimit)接受一个readAheadLimit参数。

不应将readAheadLimit设置为0。尝试使用大于在迭代中读取的字节数的有意义的数字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5841172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档