1

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

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

4

3 回答 3

2

好吧,既然您正在为测试用例读取文件,我将假设您知道传入数据的确切格式以及需要如何解析它。在文档中查看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可能是最好的选择。

于 2009-12-08T17:21:32.510 回答
1

大多数基本数据类型都有一个.Parse.TryParse()方法可以为您做到这一点。

例如Int32.TryParse方法。

于 2009-12-08T13:42:08.407 回答
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);
于 2009-12-08T13:42:56.423 回答