2017-02-16 65 views
1

如何忽略第2個字串如何跳過在C#中的字符串開始2個字

,如:

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

的前兩個單詞是世界你好,所以我想跳過它們,但下一次 也許這些單詞不會相同,就像它們可能成爲「Hakuna Matata」一樣,但該程序也應該跳過它們。 P:不建議刪除字符,它不會在這裏工作我猜,因爲我們不知道這些字的長度是多少,我們只是想跳過前兩個字。並打印剩下的部分。

+2

找到第二空間,並從空格字符的第二個索引什麼離開 – vu1p3n0x

+1

子串到字符串的末尾。 – David

回答

4

請試試這個代碼:

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

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

它將由空格分割字符串,跳過兩個元素再加入所有元素成一個字符串。

UPDATE:

如果你有多餘的空間比第一去除多餘的空格和刪除的話:

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

UPDATE:

另外,爲了避免多餘的空格,通過建議戴(在下面的評論)我用StringSplitOptions Split()

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

如果有順序匹配字符,'String.Split(Char)'的缺省行爲將導致空元素,而使用''''只會匹配空格字符。我建議使用'String.Split(null,StringSplitOptions.RemoveEmptyEntries)'代替(它匹配所有空白元素,並且不包含重複項)。 – Dai

+0

謝謝@ kat1330 –

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); 
+0

@Andrew如果你已經熟悉狀態機的構造,這並不複雜,但我很欣賞它的第一眼看起來很嚇人。這種方法的一個優點是純粹的速度:內部分配爲零,它在'O(n)'時間內運行,甚至在'Substring'調用之前甚至遍歷整個字符串。 – Dai

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);        
    } 
} 
相關問題