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

dav*_*_11 1 c# string substring

我已经声明了一个字符串,我想从字符串中获取第二个单词.例如.

string str = "Hello world";
Run Code Online (Sandbox Code Playgroud)

我想从str得到"世界"这个词.

lc.*_*lc. 7

最简单的答案是Split在空间上,并采取第二项:

var secondWord = str.Split(' ').Skip(1).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

这只会根据您的需要查看尽可能多的字符,然后在最后复制出您想要的部分.它将比上述表现更好.但是,除非你对所出版的每本书的第二个字进行编目,否则它可能无关紧要.


或者,以老式的方式做.遍历每个字符,直到找到第一个空格,然后将字符保留到字符串的下一个或结尾:

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();
Run Code Online (Sandbox Code Playgroud)

该方法在性能上应与第二种方法相当.您可以使用枚举器而不是foreach循环来完成相同的操作,但我会将其作为练习留给读者.:)


Har*_*sad 6

你可以这样做.我建议在提出简单的问题之前先做搜索.

str.Split(' ')[1]
Run Code Online (Sandbox Code Playgroud)

演示代码

请注意,您必须在输入中包含验证,例如字符串包含多个单词等.

  • 如果输入字符串是单个单词,将抛出“索引超出范围异常” (2认同)