虽然我可以使用正则表达式替换单词,但这是我的代码:
public static string replacestring(string input)
{
var Words = "memory|buffer overflow|address space|stack overflow|call stack";
string cleanword = Regex.Replace(input, @"" + Words + "", "", RegexOptions.IgnoreCase);
return cleanword;
}
这是字符串值:
在软件中,如果调用堆栈指针超出堆栈限制,则会发生堆栈溢出。调用堆栈可以包括有限数量的地址空间,通常在程序开始时确定。调用堆栈的大小取决于许多因素,包括编程语言,机器架构,多线程和可用内存量。当程序试图使用比调用堆栈上可用空间更多的空间时(也就是说,当它试图访问超出调用堆栈边界的内存时,这本质上是一个缓冲区溢出),堆栈被称为溢出,通常导致程序崩溃。
如何选择并显示字符串中的单词并计算它们?
例如
发现:堆栈溢出,地址空间,调用堆栈,内存,缓冲区溢出
计数:5
百万感谢提前表示非常感谢,并对造成的任何不便表示歉意。
答案 0 :(得分:3)
你可以从这样的事情开始:
<Picker x:Name="picker"
Title="Select new status"
TextColor="Black"
HorizontalOptions="Start"
ItemsSource="{Binding StatusList}"
ItemDisplayBinding="{Binding E_Name}"
SelectedItem="{Binding SelectedStatus}"/>
<Label Text="{Binding SelectedStatus.E_Id}" IsVisible="False" x:Name="E_Id"/>
输出:
发现:内存,缓冲区溢出,地址空间,堆栈溢出,调用堆栈
数:5
答案 1 :(得分:1)
您可以使用LINQ删除重复项并返回数组的计数。
var count = Regex.Matches(str, pattern).OfType<Match>().Select(m => m.Groups[0].Value).Distinct().ToArray().Count();
输出:
5
答案 2 :(得分:0)
你可以像这样使用字符串的split函数:
var result = Words.split(new char[] {'|', ' '}) ;
var wordCount = result.Length;
答案 3 :(得分:0)
这是使用linq作为替代方案的解决方案: 这也解决了OP中隐含的唯一性。
var toMatch = "memory|buffer overflow|address space|stack overflow|call stack";
Regex reg = new Regex(toMatch, RegexOptions.IgnoreCase);
var result = reg.Matches(input)
.OfType<Match>()
.Where (m => m.Success)
.GroupBy(m => m.Value)
.Select (m => new { Word = m.First().Value, QtyFound = m.Count() });
var wordsFound = string.Join(",", result.Select(r => r.Word));
var totalFound = result.Sum(r => r.QtyFound);