在列表中查找单词

时间:2016-09-30 15:52:26

标签: c# list filereader

我需要在List i中找到一个工作,我用作test.txt的文件有一行说“这是一个测试”,它全部读入列表中的一个元素,我想要程序查找单词'test'是否在列表中,如果是,则将其更改为大写。这是我的代码,用于阅读

中的所有内容
string line;
        var list = new List<string>();
        var fileStream = new FileStream(@"c:\location\test.txt", FileMode.Open, FileAccess.Read);
        var streamReader = new StreamReader(fileStream, Encoding.UTF8);
        while ((line = streamReader.ReadLine()) != null)
           {
               list.Add(line);
           }
           //These are a few tries i made, none of them are doing the job tho
           //bool inlist = list.Contains("test");
           //var value = list.Find(item => item.name == "test").value;
           //var results = Array.FindAll(lines, s => s.Equals("test"));

2 个答案:

答案 0 :(得分:1)

尝试使用 Linq 正则表达式(将test提取为整个词,而不是部分单词,例如参赛者):

   var list = File
     .ReadLines(@"c:\location\test.txt")
     .Select(line => Regex.Replace(line, "\btest\b", "TEST"))
     .ToList(); // If you want List materialization

如果您只想在第1行重命名test

   var list = File
     .ReadLines(@"c:\location\test.txt")
     .Select((line, index) => index == 0 
        ? Regex.Replace(line, "\btest\b", "TEST")
        : line)
     .ToList(); // If you want List materialization

答案 1 :(得分:1)

尝试以下方法。您可以使用Regex(正则表达式)执行更多操作,但这将直接回答您的问题:

var lines = new List<string>();

using(var fileStream = new FileStream(@"c:\location\test.txt", FileMode.Open, FileAccess.Read)
using(var streamReader = new StreamReader(fileStream, Encoding.UTF8) {
    while (!streamReader.EndOfStream) {
        lines.Add(streamReader.ReadLine());
    }
}

lines[0].Replace("test", "Test");

要概括一个函数,你可以这样做:

void FindAndReplace(List<string> lines, string toFind, string toReplace) {
    for(int i = 0; i < lines.Count ; i++) {
        lines[i] = Regex.Replace(lines[i], $"\b{toFind}\b", toReplace);
    }
}