发送一个字符串数组作为函数的参数

本文关键字:数组 函数 参数 字符串 一个 | 更新日期: 2023-09-27 18:14:06

在一个名为Function的类中有一个函数,如下所示:

public int SearchedRecords(String [] recs)
{
    int counter = 0;
    String pat = "-----";
    String[] records = recs;
    foreach (String line in records)
    {
        if (line.Contains(pat) == true)
        {
            counter++;
        }
    }
    return counter;
}

我从我的主类中调用这个方法:

        String [] file = File.ReadAllLines("C:/Users.../results.txt");
        int counter = Function.SearchedRecords( []file);

但是我得到一个错误说:

;预期

怎么了?


另一个问题:上面的函数是从文件中计数包含模式-----的所有行(即使有更多的破折号,或者该行在破折号之前或之后有一些字符)。我说的对吗?

这有点像Java中的模式,所以也许有其他的方法。
你能开导我吗?

发送一个字符串数组作为函数的参数

删除参数中的[]。

int counter = Function.SearchedRecords(file);

是的,你对Contains方法行为的假设是正确的——你将匹配任何包含五个连续破折号的行,不管它们之前或之后是什么字符。

如果你想解析五个破折号,前后没有任何东西,我建议查看RegEx类(正则表达式)。

变化

int counter = Function.SearchedRecords( []file);

int counter = Function.SearchedRecords(file);

,是的,这将工作,对于那个字符串。然而,Contains是大小写敏感的,如果您正在匹配一个名称,或另一个带有字母字符的字符串,则大小写必须相同才能匹配,例如line.Contains("Binary Worrier")将不匹配字符串"Hello binary worrier"。

同样,如果您知道文件总是很小,那么将整个文件读入内存是可以的。,该方法的效率随着文件的增大而降低。最好总是使用System.IO.StreamReaderSystem.IO.File.ReadLines之类的东西(在。net 4和更高版本中可用),它们允许您一次一行地使用文件。例如

using (var reader = new System.IO.StreamReader("MyFile.txt"))
{
    while(!reader.EndOfStream)
    {
        string line = reader.ReadLine();
        if (line.Contains(pattern))
            counter++;
    }
}

改为

 int counter = Function.SearchedRecords(file);

从方法调用中删除'[]'。

首先你需要创建一个函数类的实例,然后运行这个函数。希望下面的代码有帮助

Function fb = new Function();
int counter = fb.SearchedRecords(file);

现在,你正在使用SearchRecords作为一个静态类的静态函数,它不需要实例化。

您可以使用LINQ:

以更短的方式完成此操作。
 int counter = file.Count(line => line.Contains("-----"));