在 Java 中有一个很好的类,叫做 Scanner,用于读取特定格式的字符串和流到数据结构,如整数、浮点数,...... Mono 中是否有任何等价物?在 .Net 中有一个二进制阅读器,但它将数据作为二进制文件读取。我想要一个通过从字符串中解析数据来读取数据的类。
编辑:对当前答案的反应,我知道大多数数据类型都有解析方法,但问题是,它们不会按顺序读取字符串。在 Java 中,您只需初始化对象,然后通过激活方法,依次读取数据类型。
在 Java 中有一个很好的类,叫做 Scanner,用于读取特定格式的字符串和流到数据结构,如整数、浮点数,...... Mono 中是否有任何等价物?在 .Net 中有一个二进制阅读器,但它将数据作为二进制文件读取。我想要一个通过从字符串中解析数据来读取数据的类。
编辑:对当前答案的反应,我知道大多数数据类型都有解析方法,但问题是,它们不会按顺序读取字符串。在 Java 中,您只需初始化对象,然后通过激活方法,依次读取数据类型。
好吧,既然您正在为测试用例读取文件,我将假设您知道传入数据的确切格式以及需要如何解析它。在文档中查看Java 的Parser
类确实使它看起来非常复杂或不仅仅是一个便利类。它似乎只是在空格上标记流字符串,并提供获取标记和解析它的函数。据我所知,.Net 没有等效的类。因此,如果您想要一个重复使用,那么您需要自己编写一个。
但是您需要的基本算法是读取文件内容、拆分令牌并解析它们。如果您的文件大小合理,您可以使用File.ReadAllLines()
which 将文件的内容逐行读取到String[]
. 或者您可以使用一个StreamReader
类来一次读取一行,使用它的ReadLine()
. 然后,一旦将它们排成一行,就可以用String
's对它们进行标记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 中,许多类型具有静态.Parse()
和.TryParse()
采用 String 参数的方法。
您可以执行以下操作:
Stream s = new Stream();
// Wire up the stream.
StreamReader reader = new StreamReader(s);
String value = reader.ReadToEnd();
int valueAsInt = Int32.TryParse(value);