C# 。我需要在每一行(从文件)中找到最短的单词

时间:2016-12-01 15:14:58

标签: c# string char lines

我需要在每一行中找到最短的单词,条件是这些单词不应该短于" 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;
    }

2 个答案:

答案 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;