C# 如何使用foreach循环从数组中拾取所需的字?
我想从给定的输入代码中选择所有类的类名。然而,我的代码只选择了一个类名。我该怎么办 我正在用C编写一个Windows窗体。我曾尝试用foreach循环来实现它,但它不起作用C# 如何使用foreach循环从数组中拾取所需的字?,c#,C#,我想从给定的输入代码中选择所有类的类名。然而,我的代码只选择了一个类名。我该怎么办 我正在用C编写一个Windows窗体。我曾尝试用foreach循环来实现它,但它不起作用 private void btnDetect_Click(object sender, EventArgs e) { // splitting code string mystr = richTextBox1.Text; if (mystr.ToLower().Contains("class")) {
private void btnDetect_Click(object sender, EventArgs e)
{
// splitting code
string mystr = richTextBox1.Text;
if (mystr.ToLower().Contains("class"))
{
string[] splitText = mystr.Split(new char[] { ' ' });
foreach (string word in splitText)
{
int classindex = Array.FindIndex(splitText, r => r.Contains("class"));
string className = splitText[classindex + 1];
MessageBox.Show(className);
}
}
else
MessageBox.Show("class not found");
}
}
我希望输出显示输入中的所有类名,但我得到的输出只是第一个类名数组。FindIndex始终返回第一个索引,因为条件从未更改
您可以使用:
string[] tokens = mystr.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
List<string> classList = new List<string>();
for (int i = 0; i < tokens.Length - 1; i++)
{
if (tokens[i].Equals("class", StringComparison.InvariantCultureIgnoreCase))
classList.Add(tokens[++i]);
}
您可以使用以下方法:
public IEnumerable<string> GetClasses(string str)
{
if (!str.Contains("Class", StringComparison.OrdinalIgnoreCase)) yield break;
string[] words =str.Split(' ', StringSplitOptions.RemoveEmptyEntries);
int wordsCount = words.Length;
for (var index = 0; index < wordsCount; index++)
{
string word = words[index];
if (!word.Equals("Class", StringComparison.OrdinalIgnoreCase)) continue;
if (wordsCount > index + 1) continue;
if (words[index + 1].Equals("Class", StringComparison.OrdinalIgnoreCase)) continue;
yield return words[index + 1];
}
}
您能发布示例输入和预期输出吗文本是什么样子的?您的findindex会找到第一个。。。它总是只会找到第一个,只会为找到的每一个类显示它。你不是想检查word是否为类,而是显示数组中的下一项吗?显示一些示例输入文本,然后我们可以测试和修复你的代码。还考虑使用字符串函数如DexFox来查找Case.public类方{公共双面{{GET;} public quare双面{侧=边}}}公共类圆{public双半径{{get;}公共循环双半径{RADIUS=RADIUS;}}返回的所有实例。System.Collection.Generic.List'1[System.String]