C#IF语句不排除字符串



所以问题是:我想从文件中读取并排除某些字符串(我没有经验,所以我决定使用IF,所以我想排除字符串Name、facultyNumber等,但出于某种原因它没有排除它们?(我试图从IF语句中删除空格(

public void read()
{
string[] textes = File.ReadAllLines(@"C:UserssashkSourceReposConsoleApp6ConsoleApp6save.txt", Encoding.Default);
double[] gread = new double[] { 1, 2, 3 };
List<string> texts = new List<string>();
int i= 0;
int z = 0;
foreach (string text in textes)
{
string[] words = textes[i].Split(' ');
for (int j = 0; j < words.Length; j++)
{
if (!words[j].Equals(" Name: ") || !words[j].Equals(" FacultyNumber: ") || !words[j].Equals(" Grades: ") || !words[j].Equals(" AverageGrade: "))
{
texts.Add(words[j]);
}
}
//  for (int j = 2; j < texts.Count; j++)
//  {
//      gread[z] = Convert.ToDouble(texts[j]); 
//  }
//  addStudent(texts[0], Convert.ToInt32(texts[1]), gread);
for (int j = 0; j < 40; j++)
{
Console.WriteLine(texts[j]);
}
i++;
}

文件的内容如下:

> Name: asd FacultyNumber: 2 Grades: 1,23  4,56  7,89   AverageGrade: 4,56
Name: as FacultyNumber: 4 Grades: 1  5  9   AverageGrade: 5
Name: ad FacultyNumber: 3 Grades: 2  4  7   AverageGrade: 4,33333333333333
Name: ddd00 FacultyNumber: 1 Grades: 12  15  99   AverageGrade: 42

您可以这样使用Contains

var excluded = new[] { "Name:", "FacultyNumber:", "Grades:", "AverageGrade:" }; 
foreach (string text in textes) 
{
string[] words = textes[i].Split(' ');
for (int j = 0; j < words.Length; j++) 
{
if (!excluded.Contains(words[j]))
{
texts.Add(words[j]);
}
}
}

但我认为你可以和林克一起做。代码会更干净:

string[] textes = File.ReadAllLines(@"C:UserssashkSourceReposConsoleApp6ConsoleApp6save.txt", Encoding.Default);
var excluded = new[] { "Name:", "FacultyNumber:", "Grades:", "AverageGrade:" }; 
var texts = textes.SelectMany(x => x.Split(' ').Where(y => !excluded.Contains(y)));
foreach(string word in texts)
{
Console.WriteLine(word);
}

我对编程还很陌生,不知道使用字符串是否有任何缺点。替换方法,但我会这样做。

public void read()
{
string[] textes = File.ReadAllLines(@"C:UserssashkSourceReposConsoleApp6ConsoleApp6save.txt", Encoding.Default);
List<string> texts = new List<string>();
for (int i = 0; i < textes.Lenght; i++)
{
texts.Add(textes[i].Replace(" Name: ", ""));
texts.Add(textes[i].Replace(" FacultyNumber: ", ""));
texts.Add(textes[i].Replace(" Grades: ", ""));
texts.Add(textes[i].Replace(" AverageGrade: ", ""));
}
foreach (string text in texts)
{
Debug.WriteLine(text);
}
}

您应该&&所有条件。由于||的偏好是从左到右,如果最左边的条件为真,则不考虑其他条件。因此,如果一个单词通过了条件!words[j].Equals(" Name: ")的这一部分,它将通过整个条件。因此,如果有一个像FacultyNumberGrades这样的单词通过了第一个条件,您将不会得到您指定的内容。你可以修改你的代码如下:

if (!(words[j].Equals(" Name: ") || 
words[j].Equals(" FacultyNumber: ") || 
words[j].Equals(" Grades: ") || 
words[j].Equals(" AverageGrade: ")))

最新更新