在c#中获取字符串的第二个单词
Getting second word of a string in c#
我已经声明了一个字符串,我想从该字符串中获取第二个单词。例如
string str = "Hello world";
我想从 str.
中获取单词 "world"
你可以做到。我建议先搜索再问简单的问题。
str.Split(' ')[1]
请注意,您必须对输入进行验证,例如字符串有多个单词等。
最简单的答案是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];
我已经声明了一个字符串,我想从该字符串中获取第二个单词。例如
string str = "Hello world";
我想从 str.
中获取单词 "world"你可以做到。我建议先搜索再问简单的问题。
str.Split(' ')[1]
请注意,您必须对输入进行验证,例如字符串有多个单词等。
最简单的答案是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];