我有一个字符串:
string features="name1,name2,name3,name4,name5,name6,name7";
现在我想提取所有名称并使用LINQ将结果存储在字符串数组中。这可能吗?
如果没有,那么请告诉我最简单的方法。
我这样做了,但是想用LINQ做。
string Allfeat = txtFeatures.Text;
string sep = ",";
string[] feat = Allfeat.Split(sep.ToCharArray());
答案 0 :(得分:2)
这是最简单的:
string[] feat = Allfeat.Split(',');
对于大多数情况, LINQ
非常棒且非常有用。但是您不必一直使用LINQ
。在这种情况下,有Split
方法的几个重载版本。其中一个以params char[]
为参数,因此您可以轻松传递zero
或more
分隔符。如果您想要简化它,您也不需要Allfeat
变量,您可以直接使用txtFeatures.Text
。
string[] feat = txtFeatures.Text.Split(',')
答案 1 :(得分:1)
你可以在Linq自己动手:
public static IEnumerable<string> CsvSplit( this IEnumerable<char> text , char delimiter = ',' )
{
StringBuilder sb = new StringBuilder() ;
foreach ( char c in text )
{
if ( c == delimiter )
{
yield return sb.ToString() ;
sb.Length = 0 ;
}
else
{
sb.Append(c) ;
}
}
if ( sb.Length > 0 )
{
yield return sb.ToString() ;
}
}
或者您可以使用正则表达式,这些内容如下:
private static Regex rxWord = new Regex( @"[^,]*") ;
public static IEnumerable<string> CsvSplit( this string text )
{
for ( Match m = rxWord.Match(text) ; m.Success ; m = m.NextMatch() )
{
yield return m.Value ;
}
}
但是string.Split()
出了什么问题?虽然解析除了琐碎的CSV文本以外的任何内容并不像看起来那么简单:D - 你可能想看看使用Sebastien Lorion最优秀的Fast CSV Reader: