2010-02-10 77 views
2

如果我有各种字符串,其中包含文本后跟空白后跟文本,我如何解析以第二个文本块中的第一个字符开头的子字符串?C#:通过检测空格解析字符串中的子字符串

例如: 如果我有字符串:
“stringA stringB”

我怎样才能提取子
“stringB”

的字符串是不同的长度,但都将是格式 。

我敢肯定,这可以很容易地用正则表达式完成,但我无法找到正确的C#语法。

回答

1

使用string.Split()

var test = "stringA stringB"; 
var elements = test.Split(new[] 
{ 
    ' ' 
}); 
var desiredItem = elements.ElementAtOrDefault(1); 

,如果你想捕获所有空格(msdn tells us more):

var test = "stringA stringB"; 
//var elements = test.Split(); // pseudo overload 
var elements = test.Split(null); // correct overload 
var desiredItem = elements.ElementAtOrDefault(1); 

编辑:
为什么伪超载?

  • .Split()获取如果所有字符串由你不要在这里需要一个正则表达式一个空格分开编译.Split(new char[0])
  • MSDN
+0

这只会解析空格,而不是所有的空格(制表符,换行符)。 – Oded 2010-02-10 08:10:50

+0

解决方案基于oos示例!无论如何,做了更新! – 2010-02-10 08:12:25

+1

什么是伪超负荷? – 2010-02-10 08:24:12

2

没有RegEx需要,只是分裂它。

var test = "stringA stringB"; 
var second = test.Split()[1]; 

,如果你在美妙的LINQ土地

var second = "string1 string2".Split().ElementAtOrDefault(1); 

,并用正则表达式(出于完整性)

var str2 = Regex.Match("str1 str2", @"\w (.*$)").Groups[1].Value; 
+1

那里不存在这样的无参数方法:) – 2010-02-10 08:08:19

+0

适合我。 .NET 3.5 – 2010-02-10 08:12:14

+0

由于编译器重载解析! – 2010-02-10 09:47:33

0

没有记录。您可以使用Split()方法:

string[] result = { }; 
string myStrings = "stringA stringB stringC"; 
result = myStrings.Split(' '); 
-1

您不需要事件Split()。我认为一个简单的IndexOf/Substring将完成这项工作。

 var input = "A B"; 
     var result = string.Empty; 
     var index = input.IndexOf(' '); 
     if (index >= 0) 
     { 
      result = input.Substring(index + 1); 
     } 
+0

- ,因为您需要知道所需项目的长度,而这不是oo的预期行为 – 2010-02-10 09:48:25

+0

我没有给您发表评论。我的解决方案?即使作者说:“我怎样才能提取子字符串?”SUBSTRING!他只想要“stringB”。为什么使用Split()?为什么要创建一个数组并仅使用最后一项?为什么在这个简单的案例中使用LINQ? – 2010-02-10 12:42:38

+0

您的解决方案可能会更快,使用较先进的技术,但绝对不容易阅读。至少不适合我。尽管如此,我还是没有倒下。 – 2010-02-10 13:56:12