2012-02-13 89 views
82

我有这个代码:如何分割()分隔字符串到列表<String>

String[] lineElements;  
    . . . 
    try 
    { 
     using (StreamReader sr = new StreamReader("TestFile.txt")) 
     { 
      String line; 
      while ((line = sr.ReadLine()) != null) 
      { 
       lineElements = line.Split(','); 
       . . . 

但后来想也许我应该用一个列表去代替。但是这个代码:

List<String> listStrLineElements; 
    . . . 
    try 
    { 
     using (StreamReader sr = new StreamReader("TestFile.txt")) 
     { 
      String line; 
      while ((line = sr.ReadLine()) != null) 
      { 
       listStrLineElements = line.Split(','); 
. . . 

...给我, “无法隐式转换类型 '字符串[]' 到 'System.Collections.Generic.List'

回答

183

string.Split()返回数组 - 你可以将其转换为使用ToList()列表:

listStrLineElements = line.Split(',').ToList(); 

您需要导入System.Linq的访问.ToList()函数。

+46

在这里可能应该提到你必须使用命名空间System.Linq – 2015-12-03 14:09:40

47

要么使用:

List<string> list = new List<string>(array); 

或LINQ:

List<string> list = array.ToList(); 

或更改代码,不依赖于日Ë具体实施:

IList<string> list = array; // string[] implements IList<string> 
1
string[] thisArray = myString.Split('/');//<string1/string2/string3/--->  
List<string> myList = new List<string>(); //make a new string list  
myList.AddRange(thisArray);  

使用AddRange通过string[],并得到一个字符串列表。

8

包括使用的命名空间System.Linq

List<string> stringList = line.Split(',').ToList(); 

你可以轻松地使用它,通过每个项目迭代。

foreach(string str in stringList) 
{ 

} 

String.Split()返回数组,因此将其转换为使用ToList()

1

这将读取csv文件的列表,它包括一个CSV分线器,处理双引号,如果Excel有它,它甚至可以阅读打开。

public List<Dictionary<string, string>> LoadCsvAsDictionary(string path) 
    { 
     var result = new List<Dictionary<string, string>>(); 

     var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
     System.IO.StreamReader file = new System.IO.StreamReader(fs); 

     string line; 

     int n = 0; 
     List<string> columns = null; 
     while ((line = file.ReadLine()) != null) 
     { 
      var values = SplitCsv(line); 
      if (n == 0) 
      { 
       columns = values; 
      } 
      else 
      { 
       var dict = new Dictionary<string, string>(); 
       for (int i = 0; i < columns.Count; i++) 
        if (i < values.Count) 
         dict.Add(columns[i], values[i]); 
       result.Add(dict); 
      } 
      n++; 
     } 

     file.Close(); 
     return result; 
    } 

    private List<string> SplitCsv(string csv) 
    { 
     var values = new List<string>(); 

     int last = -1; 
     bool inQuotes = false; 

     int n = 0; 
     while (n < csv.Length) 
     { 
      switch (csv[n]) 
      { 
       case '"': 
        inQuotes = !inQuotes; 
        break; 
       case ',': 
        if (!inQuotes) 
        { 
         values.Add(csv.Substring(last + 1, (n - last)).Trim(' ', ',')); 
         last = n; 
        } 
        break; 
      } 
      n++; 
     } 

     if (last != csv.Length - 1) 
      values.Add(csv.Substring(last + 1).Trim()); 

     return values; 
    } 
3

只不过是你可以用using System.Linq;

List<string> stringList = line.Split(',')  // this is array 
.ToList();  // this is a list which you can loop in all split string 
2

使用试试这个 名单的StringList = line.Split( '')ToList()。