发送一个字符串数组作为函数的参数
本文关键字:数组 函数 参数 字符串 一个 | 更新日期: 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.StreamReader
或System.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("-----"));