我正在尝试处理一个输入文件,其中包含我必须用于计算的数字和我需要用于比较的字符。一个简单的例子是这样的文件:
6
foobar
和这样的代码:
n = readInInt
while n > 0
c = readInSingleChar
if (c = 'f')
doSomething
n--
目前我在这里和通过谷歌找到了很多选项,包括DataStream和BufferedReader以及FileReader,但似乎有太多方法,我不确定它们是否也能满足我的需求。如果我的需求不明确,请告诉我。
简而言之,我需要逐个字符地读取文件,并将数字解释/使用为int,将字母和符号解释为字符。
最简单的方法是什么?我知道有专业的方法可以做事,而且“有”做事的方法。这是一次性的,爱好的个人使用的东西,我不是在寻找可靠或强大的功能。它必须工作正常。
谢谢!
答案 0 :(得分:1)
我觉得最简单的方法是使用StreamTokenizer这个类为您提供解析整数或字符串所需的实用程序。
我会从像
这样的东西开始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。以上是用于标记文件和通过char读取char的非常常见的方法。出于性能原因,您当然应该使用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()
}
}
答案 1 :(得分:1)
如果您正在寻找一个简单的解决方案,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
}