我需要在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"));
答案 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);
}
}