首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从一个文件中逐个读取int和chars?

如何从一个文件中逐个读取int和chars?
EN

Stack Overflow用户
提问于 2011-07-29 00:25:45
回答 2查看 2.1K关注 0票数 0

一个简单的例子是这样的文件:

代码语言:javascript
复制
6
foobar

代码如下:

代码语言:javascript
复制
n = readInInt
  while n > 0
    c = readInSingleChar
    if (c = 'f')
      doSomething
    n--

目前我在这里和通过谷歌找到了很多选择,包括DataStream、BufferedReader和FileReader,但似乎有太多的方法,我不确定它们是否都能像我需要的那样工作。如果我的需求不明确,请告诉我。

简而言之,我需要一个字符一个字符地读取文件,并将其中的数字解释/使用为整数,将字母和符号解释为字符。

做这件事最简单的方法是什么?我知道有专业的做事方式,也有"ok“做事的方式。它只需要正常工作即可。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-29 00:37:01

我觉得最简单的方法是使用StreamTokenizer,这个类提供了解析int或字符串所需的实用程序。

我会从像这样的东西开始-

代码语言:javascript
复制
StreamTokenizer tokenizer = new StreamTokenizer(new BufferedReader(new FileReader("foo.in")));

while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) {

                if (tokenizer.ttype == StreamTokenizer.TT_WORD)
                    // use tokenizer.sval
                else if (tokenizer.ttype == StreamTokenizer.TT_NUMBER)
                   // use tokenizer.nval
            }

这里有一个关于如何使用它的example。以上是标记文件和逐个字符读取字符的一种非常常见的方法。当然,出于性能原因,您应该使用FileReader或Buffer。

您也可以使用Scanner。示例代码如下所示

代码语言:javascript
复制
Scanner s = new Scanner(file);
s.useDelimiter(""); // reads one char a time
while(s.hasNext()){
  if(s.hasNextInt(){
    // then do something with s.nextInt()
  }else{
    // then do something with s.next()
  }
}
票数 1
EN

Stack Overflow用户

发布于 2011-07-29 00:41:55

如果您正在寻找一个简单的解决方案,那么java.util.scanner将是一个不错的选择。

它有易于使用的方法来读取不同的数据类型(例如int或String)。

您已经找到的使用I/O流的解决方案有点复杂,并且可能对您的任务没有那么有用。不过,它们是可以工作的(并且对于更大规模的应用程序来说非常棒)。

一个使用自定义分隔符的示例:

代码语言:javascript
复制
Scanner s = new Scanner(new File("txtfile.txt");
s.useDelimeter(Pattern.compile("\n|"); //The newline character (\n) and null 
                                       //character are the delimeters.
while (s.hasNext()) {
    if (s.hasNextInt() {
        //Do something
    } else {
        //Handle characters
    }
}

(参考:Pattern )

这种直接方法的问题是它不会接受多位整数。

另一种方法是使用标准分隔符。然后,当您想要读取字符时,读取整个标记(在您的示例中,您将读取"foobar"),然后在循环中单独处理每个字符。

代码语言:javascript
复制
String str = s.next();
for(char c : str.toCharArray()) {
    //handle characters
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6862337

复制
相关文章

相似问题

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