一个简单的例子是这样的文件:
6
foobar代码如下:
n = readInInt
while n > 0
c = readInSingleChar
if (c = 'f')
doSomething
n--目前我在这里和通过谷歌找到了很多选择,包括DataStream、BufferedReader和FileReader,但似乎有太多的方法,我不确定它们是否都能像我需要的那样工作。如果我的需求不明确,请告诉我。
简而言之,我需要一个字符一个字符地读取文件,并将其中的数字解释/使用为整数,将字母和符号解释为字符。
做这件事最简单的方法是什么?我知道有专业的做事方式,也有"ok“做事的方式。它只需要正常工作即可。
谢谢!
发布于 2011-07-29 00:37:01
我觉得最简单的方法是使用StreamTokenizer,这个类提供了解析int或字符串所需的实用程序。
我会从像这样的东西开始-
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。示例代码如下所示
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()
}
}发布于 2011-07-29 00:41:55
如果您正在寻找一个简单的解决方案,那么java.util.scanner将是一个不错的选择。
它有易于使用的方法来读取不同的数据类型(例如int或String)。
您已经找到的使用I/O流的解决方案有点复杂,并且可能对您的任务没有那么有用。不过,它们是可以工作的(并且对于更大规模的应用程序来说非常棒)。
一个使用自定义分隔符的示例:
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"),然后在循环中单独处理每个字符。
String str = s.next();
for(char c : str.toCharArray()) {
//handle characters
}https://stackoverflow.com/questions/6862337
复制相似问题