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

Getting second word of a string in c#

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

string str = "Hello world";

我想从 str.

中获取单词 "world"

你可以做到。我建议先搜索再问简单的问题。

str.Split(' ')[1]

Demo code

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

最简单的答案是space上的Split,取第二项:

var secondWord = str.Split(' ').Skip(1).FirstOrDefault();

我在这里使用 FirstOrDefault 这样您只需输入一个单词就可以获得有效的 null 结果。

缺点是它会解析整个字符串,所以如果你想要一本书的第二个单词,这不是一个好的建议。


或者,您可以利用 IndexOf 找到 space 的第一次和第二次出现,然后 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);
}

只看你需要的字数,最后复制出你要的部分。它会比上面的表现更好。但这可能无关紧要,除非您对已出版的每本书的第二个词进行编目。


或者,按照 old-fashioned 的方式进行。遍历每个字符,直到找到第一个 space,然后保留字符直到找到下一个或字符串的末尾:

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 循环来完成同样的事情,但我将把它留作 reader 的练习。 :)

这是我认为的完美答案

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