在C#中获取字符串的第二个单词

4
我声明了一个字符串,我想从中获取第二个单词。例如:
string str = "Hello world";

我想要从字符串中获取单词"world"。


1
var a = str.Split(' ').Last(); - Slava Utesinov
2
很简单,所以我建议你首先阅读关于你选择的编程语言的书籍。你可以使用Split函数来实现你想要的功能。 - Farhad Jabiyev
3个回答

12
最简单的方法是按空格进行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循环来实现相同的事情,但我会把它作为读者的练习。


6
你可以做到这一点。我建议在询问简单问题之前进行搜索。
str.Split(' ')[1]

演示代码

请注意,您需要对输入进行验证,例如字符串是否有多个单词等。


2
如果输入字符串只有一个单词,将抛出“索引超出范围异常”。 - sujith karivelil
没错,但是让用户处理这样的边界情况。无论如何,我会将此作为答案的一部分。谢谢@un-lucky。 - Hari Prasad

1

我认为这是完美的答案

//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];

你为什么认为这是完美的答案? - TylerH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接