是否有单声道(.Net)与Java中的Scanner类相同

时间:2009-12-08 13:38:39

标签: java .net mono java.util.scanner

在Java中有一个很好的类叫做Scanner,用于读取某种格式的字符串和流到数据结构,如整数,浮点数......在Mono中是否有任何等价物?在.Net中有一个二进制阅读器,但它将数据作为二进制文件读取。我想要一个通过从字符串中解析数据来读取数据的类。

编辑:对当前答案的反应,我知道大多数数据类型都有一个解析方法,但问题是,它们不会按顺序读取字符串。在Java中,您只需初始化对象,通过激活方法,您可以按顺序读取数据类型。

3 个答案:

答案 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);