在Java中,有一个称为Scanner的良好类,用于读取特定格式的数据流和字符串,如整数,浮点数等... Mono有没有相同的功能?在.Net中有一个二进制阅读器,但它将数据作为二进制文件读取。我想要一个通过解析字符串来读取数据的类。是否有与Java中的Scanner类相当的单声道(.Net)
编辑:对当前答案的反应,我知道大多数的数据类型都有一个解析方法,但这些问题是,他们不会顺序读取字符串。在Java中,只需初始化对象,然后通过激活方法即可顺序读取数据类型。
在Java中,有一个称为Scanner的良好类,用于读取特定格式的数据流和字符串,如整数,浮点数等... Mono有没有相同的功能?在.Net中有一个二进制阅读器,但它将数据作为二进制文件读取。我想要一个通过解析字符串来读取数据的类。是否有与Java中的Scanner类相当的单声道(.Net)
编辑:对当前答案的反应,我知道大多数的数据类型都有一个解析方法,但这些问题是,他们不会顺序读取字符串。在Java中,只需初始化对象,然后通过激活方法即可顺序读取数据类型。
好吧,既然你正在阅读的测试用例文件,我会假设你知道数据的精确格式进来的,以及它如何需要被解析。在文档中查看Java的Parser
类确实使它看起来非常复杂或比方便的类更多。它似乎只是对空间上的流串进行标记,并提供获取令牌和解析它的函数。据我所知,.Net没有相同的类。所以如果你想要一个重用,那么你需要自己写一个。
但您需要的基本算法是读取文件内容,拆分令牌并解析它们。如果您的文件尺寸合理,则可以使用File.ReadAllLines()
,该文件逐行读取文件内容到String[]
。或者,您可以使用StreamReader
类通过ReadLine()
逐行读取一行。然后,一旦你把它们排成一行,就用String
的Split()
来标记它们,然后解析它们。
不知道究竟如何需要在文件中使用的值,一个很基本的模式可能是:
// Read in the whole file
String[] strLines = File.ReadAllLines(strFilePath);
// Loop through each of the lines to process their contents
foreach (String strLine in strLines) {
// Tokenize on the spaces
String[] strTokens = strLine.Split(' ');
// Parse the values
int iIntValue = Int.Parse(strTokens[0]);
double dDoubleValue = Double.Parse(strTokens[1]);
// Do something with the values
}
创建自己的Parser
类将让你保持状态,并自动提前标记为你使用它们。如果你走这条路线,StreamReader
可能是最好的选择。
大多数基本数据类型将有一个.Parse
和.TryParse()
方法,将为您做到这一点。例如,Int32.TryParse方法。
在.NET中,许多类型具有带有String参数的静态.Parse()
和.TryParse()
方法。
你可以这样做:
Stream s = new Stream();
// Wire up the stream.
StreamReader reader = new StreamReader(s);
String value = reader.ReadToEnd();
int valueAsInt = Int32.TryParse(value);
我没有意识到这一点,但要自己敲一个类似的课程应该不会太困难。 – LukeH 2009-12-08 13:58:35
你读什么样的流?一份文件? – CuppM 2009-12-08 15:50:59
事实上,一个包含测试用例数据的文件 – 2009-12-08 16:58:06