我声明了一个字符串,我想从中获取第二个单词。例如:
string str = "Hello world";
我想要从字符串中获取单词"world"。
Split
,然后取第二个元素。var secondWord = str.Split(' ').Skip(1).FirstOrDefault();
我在这里使用FirstOrDefault
,这样你就可以得到一个有效的null
结果,只需输入一个单词。
不过缺点是它会解析整个字符串,所以如果你想要一本书的第二个单词,这不是一个好建议。
或者,你可以利用IndexOf
找到第一和第二个空格的出现位置,然后使用Substring
来取出那部分内容:
static string GetSecondWord(string str)
{
var startIndex = str.IndexOf(' ') + 1;
if (startIndex == 0 || startIndex == str.Length)
return null;
var endIndex = str.IndexOf(" ", startIndex, StringComparison.CurrentCulture);
if (endIndex == -1)
endIndex = str.Length - 1;
return str.Substring(startIndex, endIndex - startIndex + 1);
}
这种方法只会查找所需的字符数量,然后从中复制出需要的部分。相比上面的方法,它的性能更好。但是除非您要编目每本已出版书籍的第二个单词,否则可能并不重要。
或者,采用传统的方式。逐个字符遍历,直到找到第一个空格,然后保留字符,直到下一个空格或字符串末尾:
var sb = new StringBuilder();
bool spaceFound = false;
foreach(var c in str)
{
if(c == ' ')
{
if (spaceFound) //this is our second space so we're done
break;
spaceFound = true;
}
else
{
if (!spaceFound) //we haven't found a space yet so move along
continue;
sb.Append(c);
}
}
var secondWord = sb.ToString();
这种方法的性能应该与第二种方法相当。你可以使用枚举器而不是foreach循环来实现相同的事情,但我会把它作为读者的练习。
我认为这是完美的答案
//single space(or)
string line = "Hello world";
//double space(or)
string line = "Hello world";
//multiple space(or)
string line = "Hello world";
//multiple Strings
string line = "Hello world Hello world";
//all are working fine
string[] allId = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
string finalstr = allId[allId.Length-1];
Split
函数来实现你想要的功能。 - Farhad Jabiyev