我需要在每一行中找到最短的单词,条件是这些单词不应该短于" x"
例如,这是数据:
随着Letraset表的发布,它在20世纪60年代得到了普及 包含Lorem Ipsum段落,最近还有桌面版 出版软件,如Aldus PageMaker,包括Lorem Ipsum的版本
如果我写的例如x = 5;
结果应该是:
的Lorem
的Aldus
的Lorem
我知道如何找到最长的单词,但是条件不是最短的单词:
static string Longest(string line, char[] s, int x)
{
string[] parts =line.Split(s,StringSplitOptions.RemoveEmptyEntries);
string longg = "";
foreach (string word in parts)
if (word.Length >=longg.Length)
longg = word;
return longg;
}
答案 0 :(得分:1)
你可以使用Linq。
<div class="text-holder">
<h3 class="text">This is a test</h3>
</div>
将为您提供长度至少为return parts.Where(w => w.Length >= x).OrderBy(w => w.Length).FirstOrDefault();
的最短单词,如果不符合要求,则为x
。如果您想要一个空字符串而不是null
,则可以在末尾添加?? string.Empty
。
答案 1 :(得分:0)
这将检查每个单词,并返回大于或等于x
且短于shortWord
的单词。
static string Shortest(string line, char[] s, int x)
{
string[] parts =line.Split(s,StringSplitOptions.RemoveEmptyEntries);
string shortWord = "";
foreach (string word in parts)
if (word.Length >= x && (shortWord.Length == 0 || word.Length < shortWord.Length))
shortWord = word;
return shortWord;
}
<强>更新强>
这是一个函数,它接受一个单词和一个字母数组,并返回单词中存在的第一个字母。
static char GetLetter(string word, char[] letters)
{
foreach(var c in word)
if (letters.Contains(c)) return c;
return '\0'; // return a default letter if no letters was found.
}
您可以将其称为(GetLetter("Lorem", new char[] {'a', 'e', 'o'})
)。当您收到该字母(即o
中的"Lorem"
)时,您可以找到包含该字母的所有字词,如下所示:
List<string> result = new List<string>();
foreach (var word in line)
{
if (word.Contains(c)) result.Add(word); // c is the letter
}
return result;