我做了一个带有.cs文件的小项目,读取它们并返回文件中最常用的单词。但是,现在它返回最常见的单词是逗号。 我怎么能这样做,所以拆分字符串会忽略逗号?
例如:我有一个字符串:
,. ? a a,b cdef cfed,abef abef abef,
现在它返回最常见的词是' abef'并且它发生了2次(程序不计算第三个abef,最后是逗号的那个。)
另一个例子:
,. ? a a,b cdef cfed,abef abef abef ,,,
现在回来说最常用的单词是逗号','它发生了3次,但问题是 - 我希望我的程序忽略逗号并仅仅专注于单词。
Account.FirstName
答案 0 :(得分:6)
Split可以将一系列字符分开。所以你可以分割空格和逗号。然后使用适当的StringSplitOption删除空条目
string[] userText = richTextBox1.Text.ToLower().Split(new char[] { ' ', ','}, StringSplitOptions.RemoveEmptyEntries );
你也可以使用Linq用这样的代码计算一个单词的频率
var g = userText.GroupBy(x => x)
.Select(z => new
{ word = z.Key, count = z.Count()})
.ToList();
string mostUsed = g.OrderByDescending(x => x.count)
.Select(x => x.word)
.FirstOrDefault();
答案 1 :(得分:3)
您可以用空字符串替换逗号,然后通过算法运行输出。
string original = ", . ? a a, b cdef cfed, abef abef abef,";
string noCommas = original.Replace(",", string.Empty);
参考: https://msdn.microsoft.com/en-us/library/fk49wtc1(v=vs.110).aspx
答案 2 :(得分:2)
另一种选择是通过使用正则表达式Regex.Split更具体地使分割更容易扩展:
string input = ", . ? a a, b cdef cfed, abef abef abef, , ,";
string[] result = Regex.Split(input, @"\w+");
点击此处live testing。
如果?
是有效字,则正则表达式可以是@"\w+|\?"
。
所以,我的建议是使用正则表达式,即使分割方法现在已经足够了,因为它更强大并且可以轻松适应以后的更改。
作为奖励,学习正则表达式真是太好了。