代码之家  ›  专栏  ›  技术社区  ›  willeM_ Van Onsem

Java中是否有与Scanner类等效的mono(.Net)

  •  1
  • willeM_ Van Onsem  · 技术社区  · 15 年前

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

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

    3 回复  |  直到 14 年前
        1
  •  2
  •   CuppM    15 年前

    好的,因为您正在为测试用例读取一个文件,所以我假设您知道传入数据的确切格式以及需要如何解析它。看看Java的 Parser 文档中的类确实使它看起来非常复杂,或者说不仅仅是一个方便的类。它似乎只是在空格上标记流字符串,并提供获取标记和解析它的函数。就我所知,.Net没有一个等价的类。因此,如果您想要一个可重用的,那么您需要自己编写一个。

    File.ReadAllLines() String[] . 或者你可以用一个 StreamReader 类使用其 ReadLine() . 一旦你把它们排成一行,你就可以用 String 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
    }
    

    创造你自己的 分析器 类将允许您在使用状态和自动推进令牌时维护它们。如果你走那条路,那条路 也许是最好的选择。

        2
  •  1
  •   Oded    15 年前

    .Parse .TryParse() 方法将为您实现这一点。

    例如 Int32.TryParse 方法。

        3
  •  1
  •   Justin Niessner    15 年前

    在.NET中,许多类型都具有静态 .Parse() .TryParse() 采用字符串参数的方法。

    你可以这样做:

    Stream s = new Stream();
    // Wire up the stream.
    
    StreamReader reader = new StreamReader(s);
    String value = reader.ReadToEnd();
    
    int valueAsInt = Int32.TryParse(value);
    
    推荐文章