我有3个文本文件,即
input.txt
array1.txt
array2.txt
input.txt文件包含以下行:
the file in
the computer is
removedby user,
there are seven
wonders in the world
ithink...
array1.txt文件包含:
computer
user
good
array2.txt文件包含:
seven
world
none
我想用array1.txt和array2.txt检查input.txt中是否存在单词
我想说的是例如:input.txt中的单词与array1.txt中的单词匹配意味着输出必须是“computer”存在于array1中。如果单词与array2.txt匹配则表示它应该显示array2中存在的单词。
输出:单词计算机和用户出现在array1单词世界中,七个出现在array2
中我在c#中的代码:
int count;
using (StreamReader reader = File.OpenText("C:/Users/input.txt"))
{
string contents = reader.ReadToEnd();
MatchCollection matches = Regex.Matches(contents, "computer", RegexOptions.IgnoreCase);
count = matches.Count;
}
if (count > 0)
{
MessageBox.Show("present");
}
else
{
MessageBox.Show("absent");
}
答案 0 :(得分:1)
我采取不同的方法:
File.ReadAllText
或File.ReadAllLines
。Contains
而不是正则表达式。Where
方法检查数组中每个项目的谓词所以:
var arr1 = File.ReadAllLines("array1.txt"); // Reading to get string[] - item for each line
var arr2 = File.ReadAllLines("array2.txt");
var input = File.ReadAllText("input.txt"); // Reading to get one string for all text
var arr1WordsInInput = arr1.Where(input.Contains);
var arr2WordsInInput = arr2.Where(input.Contains);
如果你想找到匹配的所有索引,你可以使用这个问题Finding ALL positions of a substring in a large string in C#的回答中建议的函数:
var result = arr1.Select(w => new { Word = w, Indexes = input.AllIndexesOf(w) })
.Where(w => w.Indexes.Any());
这将返回IEnumerable
,其中每个项目包含两个属性:匹配的单词以及在input
文本中找到它的索引