如何使用LINQ从逗号分隔的字符串中提取单词?

时间:2014-03-03 18:47:45

标签: c# string linq

我有一个字符串:

string features="name1,name2,name3,name4,name5,name6,name7";

现在我想提取所有名称并使用LINQ将结果存储在字符串数组中。这可能吗?

如果没有,那么请告诉我最简单的方法。

我这样做了,但是想用LINQ做。

string Allfeat = txtFeatures.Text;
string sep = ",";
string[] feat = Allfeat.Split(sep.ToCharArray());

2 个答案:

答案 0 :(得分:2)

这是最简单的:

string[] feat  = Allfeat.Split(',');
对于大多数情况,

LINQ非常棒且非常有用。但是您不必一直使用LINQ。在这种情况下,有Split方法的几个重载版本。其中一个以params char[]为参数,因此您可以轻松传递zeromore分隔符。如果您想要简化它,您也不需要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