如何忽略字符串的前两个单词
像:
String x = "hello world this is sample text";
在这个前两个单词是hello world,所以我想跳过它们,但是下次 也许这些单词会不一样,就像它们可能成为“Hakuna Matata”一样,但程序也应该跳过它们。
P.S:不要建议删除它在这里不起作用的字符我猜,因为我们不知道这些单词的长度是多少,我们只想跳过前两个单词。并打印其余部分。
答案 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);
}
}