2009-12-08 63 views
1

在Java中,有一个称为Scanner的良好类,用于读取特定格式的数据流和字符串,如整数,浮点数等... Mono有没有相同的功能?在.Net中有一个二进制阅读器,但它将数据作为二进制文件读取。我想要一个通过解析字符串来读取数据的类。是否有与Java中的Scanner类相当的单声道(.Net)

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

+0

我没有意识到这一点,但要自己敲一个类似的课程应该不会太困难。 – LukeH 2009-12-08 13:58:35

+0

你读什么样的流?一份文件? – CuppM 2009-12-08 15:50:59

+0

事实上,一个包含测试用例数据的文件 – 2009-12-08 16:58:06

回答

2

好吧,既然你正在阅读的测试用例文件,我会假设你知道数据的精确格式进来的,以及它如何需要被解析。在文档中查看Java的Parser类确实使它看起来非常复杂或比方便的类更多。它似乎只是对空间上的流串进行标记,并提供获取令牌和解析它的函数。据我所知,.Net没有相同的类。所以如果你想要一个重用,那么你需要自己写一个。

但您需要的基本算法是读取文件内容,拆分令牌并解析它们。如果您的文件尺寸合理,则可以使用File.ReadAllLines(),该文件逐行读取文件内容到String[]。或者,您可以使用StreamReader类通过ReadLine()逐行读取一行。然后,一旦你把它们排成一行,就用StringSplit()来标记它们,然后解析它们。

不知道究竟如何需要在文件中使用的值,一个很基本的模式可能是:

// 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可能是最好的选择。

1

大多数基本数据类型将有一个.Parse.TryParse()方法,将为您做到这一点。例如,Int32.TryParse方法。

1

在.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); 
相关问题