如何获取字符串的前 250 个单词?
问问题
9582 次
6 回答
28
您需要拆分字符串。您可以使用不带参数的重载(假定为空格)。
IEnumerable<string> words = str.Split().Take(250);
请注意,您需要添加using System.Linq
for 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 回答