Подтвердить что ты не робот

Получить первые 250 слов строки?

Как получить первые 250 слов строки?

4b9b3361

Ответ 1

Вам нужно разбить строку. Вы можете использовать перегрузку без параметра (предполагаются пробелы).

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

Обратите внимание, что вам нужно добавить using System.Linq для Enumerable.Take.

Вы можете использовать ToList() или ToArray() ro создать новую коллекцию из запроса или сохранить память и перечислить ее напрямую:

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

Ответ 2

yourString.Split(' ').Take(250);

Я думаю. Вы должны предоставить дополнительную информацию.

Ответ 3

String.Join("", yourstring.Split(). Возьмите (250).ToArray())

Ответ 4

string testString = "The quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dog."
string firstWords = Regex.Match(testString, @"^(\w+\b.*?){250}").ToString();

Ответ 5

Дополнение к ответу Тима, вот что вы можете попробовать

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());

Ответ 6

Попробуйте следующее:

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);
}

Ответ 7

Это возможно без вызова Take().

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

Это также позволяет расщепляться на основе большего, чем просто пробела "" и, следовательно, фиксирует случаи, когда пробелы ошибочно отсутствуют во входе.

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

Используйте StringSplitOptions.None, если вы хотите, чтобы вместо него были возвращены пустые строки.