在Java中有一个很好的类叫做Scanner,用于读取某种格式的字符串和流到数据结构,如整数,浮点数......在Mono中是否有任何等价物?在.Net中有一个二进制阅读器,但它将数据作为二进制文件读取。我想要一个通过从字符串中解析数据来读取数据的类。
编辑:对当前答案的反应,我知道大多数数据类型都有一个解析方法,但问题是,它们不会按顺序读取字符串。在Java中,您只需初始化对象,通过激活方法,您可以按顺序读取数据类型。答案 0 :(得分:2)
好吧,既然您正在为测试用例读取文件,我将假设您知道正在进入的数据的确切格式以及如何解析它。在文档中查看Java的Parser
类确实使它看起来非常复杂或者不仅仅是一个便利类。它似乎只是在空格上标记化流字符串,并提供获取令牌和解析它的函数。据我所知,.Net没有相应的类。因此,如果您想要重用一个,那么您需要自己编写一个。
但您需要的基本算法是读取文件内容,拆分标记并解析它们。如果您的文件大小合理,则可以使用File.ReadAllLines()
逐行读取文件内容到String[]
。或者您可以使用StreamReader
类使用ReadLine()
一次读取一行。然后,一旦你将它们排成一行,你就可以使用String
的{{1}}对它们进行标记,然后解析它们。
不知道您需要如何使用文件中的值,一个非常基本的模式可能是:
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
可能是最好的选择。
答案 1 :(得分:1)
大多数基本数据类型都有.Parse
和.TryParse()
方法可以帮助您。
例如Int32.TryParse方法。
答案 2 :(得分:1)
在.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);