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

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

 L.B13 нояб. 2012 г., 21:40
@kprobst Нет ....
 Blorgbeard13 нояб. 2012 г., 21:39
@kprobst, надеюсь, что остальные из нас приложили минимальные усилия, чтобы выяснить это, хотя
 Rango13 нояб. 2012 г., 21:36
str.Split().Take(250)
 kprobst13 нояб. 2012 г., 21:38
Я нене понимаю, почему такие вопросы беспощадно опускаются и закрываются ... было время, когда многие из нас не моглиЯ тоже не могу этого понять. Также обратите внимание, что онс просьбойслова, а не персонажи.
 abelenky13 нояб. 2012 г., 21:40
@kprobst: даже когда мы не моглине могу понять основные вещи (и яВ настоящее время мы, будучи новым пользователем Python, не можем справиться с основами в вопросе: что я пробовал? Каков был результат против того, что я ожидал? На какую конкретную часть я зацикливаюсь?
 Blorgbeard13 нояб. 2012 г., 21:41
@kprobst, кажется, никто не думает, что он имел в виду символы…
 PiousVenom13 нояб. 2012 г., 21:37
 malinois13 нояб. 2012 г., 21:37
Разбивая строку пробелами
 Sam I am13 нояб. 2012 г., 21:43
Я не собираюсь голосовать по этому вопросу. вопрос немного расплывчат, но этоКонечно, гораздо проще понять, чем некоторые другие вопросы на этом сайте.
 kprobst13 нояб. 2012 г., 21:40
@Blorgbeard Он сказалслова, а не персонажи. Я'Я предполагаю, что люди прыгали на этом из-за этого.

Ответы на вопрос(5)

Решение Вопроса

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

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

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

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

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

Обновить

Так как это кажется довольно популярным, ям добавив следующее расширение, которое является более эффективным, чемEnumerable.Take подход, а также возвращает коллекцию вместо (отложенное выполнение)запрос.

Оно используетString.Split гдепробельные символы считаются разделителями, если параметр разделителя имеет значение null или не содержит символов. Но метод также позволяет передавать разные разделители:

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
 Alexei Levenkov13 нояб. 2012 г., 21:45
+1 ... Кроме того, если бы вопрос был реальным, то поиск пробелов / пробелов / разделителей был бы более уместным (например, "\ Ш + \ s»), возможно, в сочетании сyield return не читать за пределами первых 250 слов.
 Rango14 нояб. 2012 г., 00:18
@AlexeiLevenkov: обратите внимание, чтоSplit без аргументов это не то же самое, чтоSplit(' '), Оно используетChar.IsWhiteSpace внутри, который включает в себя несколько символов.
 Rango26 нояб. 2014 г., 11:42
@AlexeiLevenkov: так какs рос в народе яМы добавили другой подход, который более эффективен и позволяет передавать другие разделители, чем пробелы. Он также читает только до тех пор, пока не наберет желаемое количество слов из-заэтотString.Split-overload.
 Travis J13 нояб. 2012 г., 21:44
Если параметр разделителя имеет значение NULL или не содержит символов, символы пробела считаются разделителями. "

это то, что вы можете попробовать

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

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

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

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

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

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

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

 Rango13 нояб. 2012 г., 21:38
Почему вы создаете новый список из массива, прежде чем взять 250?
 BlackBear13 нояб. 2012 г., 21:39
использовать take перед ToList, чтобы воспользоваться IEnumerable 'ленивая оценка
 LMB13 нояб. 2012 г., 21:40
@TimSchmelter Советы по памяти. Я не былне уверен, что массив был IEnumerable. Это не былоt некоторые версии C # назад. Редактирование. Благодарю.
 Alexei Levenkov13 нояб. 2012 г., 21:43
+0 ... Array.ToList - это слишком много. @ BlackBear, нет ленивых вычислений - Split возвращает массив.

Попробуй это:

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);="" <="" code=""></strlen;>

Ваш ответ на вопрос