14

如何获取字符串的前 250 个单词?

4

6 回答 6

28

您需要拆分字符串。您可以使用不带参数的重载(假定为空格)。

IEnumerable<string> words = str.Split().Take(250);

请注意,您需要添加using System.Linqfor Enumerable.Take

您可以使用ToList()ToArray()从查询中创建新集合或节省内存并直接枚举它:

foreach(string word in words)
    Console.WriteLine(word);

更新

由于它似乎很受欢迎,我添加了以下扩展,它比Enumerable.Take方法更有效,并且还返回一个集合而不是(延迟执行的)查询

如果分隔符参数为空或不包含字符,则它使用假定空白字符String.Split作为分隔符的地方。但该方法还允许传递不同的分隔符:

public static string[] GetWords(
       this string input,
       int count = -1,
       string[] wordDelimiter = null,
       StringSplitOptions options = StringSplitOptions.None)
{
    if (string.IsNullOrEmpty(input)) return new string[] { };

    if(count < 0)
        return input.Split(wordDelimiter, options);

    string[] words = input.Split(wordDelimiter, count + 1, options);
    if (words.Length <= count)
        return words;   // not so many words found

    // remove last "word" since that contains the rest of the string
    Array.Resize(ref words, words.Length - 1);

    return words;
}

它可以很容易地使用:

string str = "A B C   D E F";
string[] words = str.GetWords(5, null, StringSplitOptions.RemoveEmptyEntries); // A,B,C,D,E
于 2012-11-13T20:39:58.410 回答
9
yourString.Split(' ').Take(250);

我猜。您应该提供更多信息。

于 2012-11-13T20:37:49.873 回答
5

String.Join(" ", yourstring.Split().Take(250).ToArray())

于 2014-12-20T11:34:59.357 回答
1

除了蒂姆的答案,这是你可以尝试的

IEnumerable<string> words = str.Split().Take(250);
StringBuilder firstwords = new StringBuilder();
foreach(string s in words)
{
   firstwords.Append(s + " ");
}
firstwords.Append("...");
Console.WriteLine(firstwords.ToString());
于 2014-12-04T18:15:18.433 回答
0

试试这个:

public string TakeWords(string str,int wordCount)
{
    char lastChar='\0';
    int spaceFound=0;
    var strLen= str.Length;
    int i=0;
    for(; i<strLen; i++)
    {
        if(str[i]==' ' && lastChar!=' ')
        {
            spaceFound++;
        }
        lastChar=str[i];
        if(spaceFound==wordCount)
            break;
    }
    return str.Substring(0,i);
}
于 2015-09-17T07:17:56.320 回答
0

无需调用 Take() 即可。

string[] separatedWords = stringToProcess.Split(new char[] {' '}, 250, StringSplitOptions.RemoveEmptyEntries);

这还允许基于不仅仅是空格“”的拆分,因此修复了输入中错误地缺少空格时的情况。

string[] separatedWords = stringToProcess.Split(new char[] {' ', '.', ',' ':', ';'}, 250, StringSplitOptions.RemoveEmptyEntries);

StringSplitOptions.None如果您希望返回空字符串,请使用,。

于 2016-03-04T10:29:44.433 回答