如何从c#中的字符串中跳过2个单词

时间:2017-02-16 22:47:59

标签: c#

如何忽略字符串的前两个单词

像:

String x = "hello world this is sample text";

在这个前两个单词是hello world,所以我想跳过它们,但是下次 也许这些单词会不一样,就像它们可能成为“Hakuna Matata”一样,但程序也应该跳过它们。

P.S:不要建议删除它在这里不起作用的字符我猜,因为我们不知道这些单词的长度是多少,我们只想跳过前两个单词。并打印其余部分。

3 个答案:

答案 0 :(得分:5)

请尝试以下代码:

   String x = "hello world this is sample text";

   var y = string.Join(" ", x.Split(' ').Skip(2));

它将按空格分割字符串,跳过两个元素,然后将所有元素连接成一个字符串。

<强>更新

如果您有多余的空格,请先移除额外的空格并删除字词:

String x = "hello world this is sample text";
x =  Regex.Replace(x, @"\s+", " ");
var y = string.Join(" ", x.Split(' ').Skip(2));

<强>更新

另外,为了避免戴建议的额外空格(在下面的评论中)我使用了Split()和StringSplitOptions:

String x = "hello       world       this is      sample text";
var y = string.Join(" ", x.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).Select(i => i.Trim()).Skip(2));

答案 1 :(得分:0)

我建议您不要使用IndexOf,因为在连续的空白字符的情况下它不会帮助您,而String.Split(null)String.Join的使用效率低下。您可以使用正则表达式或FSM解析器执行此操作:

Int32 startOfSecondWord = -1;

Boolean inWord = false;
Int32 wordCount = 0;
for( int = 0; i < input.Length; i++ ) {
    Boolean isWS = Char.IsWhitespace( input[i] );
    if( inWord ) {
        if( isWS ) inWord = false;
    }
    else {
        if( !isWS ) {
            inWord = true;
            wordCount++;

            if( wordCount == 2 ) {
                startOfSecondWord = i;
                break;
            }
        }
    }
}

if( startOfSecondWord > -1 ) return input.Substring( startOfSecondWord );

答案 2 :(得分:0)

使用正则表达式应该这样做:

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "hello world this is sample text";
      string pattern = @"(\w+\s+){2}(.*)";
      string replacement = "$1";
      Regex rgx = new Regex(pattern);
      string result = rgx.Replace(input, replacement);

      Console.WriteLine("Original String: {0}", input);
      Console.WriteLine("Replacement String: {0}", result);                             
   }
}