将一个字符串从一个文本文件拆分到另一个列表中

本文关键字:一个 另一个 拆分 列表 字符串 文本 文件 | 更新日期: 2023-09-27 18:27:16

嗨,我知道标题听起来可能有点令人困惑,但我正在阅读一个包含许多行数据的文本文件

Example
12345 Test 
34567 Test2

我一次读一行文本,并将添加到列表中

using (StreamReader reader = new StreamReader("Test.txt"))
                    {
                        string line;
                        while ((line = reader.ReadLine()) != null)
                        {
                            list.Add(line);
                    }
                }

如果我需要像list(1)那样的数据,我如何将1234从测试中分离出来,这样我就只能提取第一列数据。pars[1]将是12345,list(2)。pars[2]将是test2

我知道这听起来很模糊,但我希望有人能理解

将一个字符串从一个文本文件拆分到另一个列表中

也许是这样的:

string test="12345 Test";
var ls= test.Split(' ');

这将得到一个字符串数组。您可以使用ls[0]ls[1]获取它们。

如果你只是选择了12345,那么ls[0]就是你要选择的。

如果你可以有一个字符串[]的列表,你可以简单地这样做:

        var list = new List<string[]>();
        using (StreamReader reader = new StreamReader("Test.txt"))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                list.Add(line.Split(' '));
            }
        }
        string firstWord = list[0][0]; //12345 
        string secondWord = list[0][1]; //Test

当您有一个文本字符串时,可以使用Split()方法将其拆分为多个部分。如果你确定每个单词(用一个或多个空格分隔)都是一列,你可以简单地写:

string[] columns = line.Split(' ');

该函数有几个重载,您可以指定是否跳过空白字段(例如,在由2个单词组成但由两个空格分隔的行中,columns[1]可能为空)。如果你确定列的数量,你也可以修正这个限制(所以如果最后一列之后的任何文本都将被视为一个字段)。

在你的情况下(只添加到列表的第一列),你可以写:

if (String.IsNullOrWhiteSpace(line))
 continue;
string[] columns = line.TrimLeft().Split(new char[] { ' ' }, 2);
list.Add(columns[0]);

第一个检查是跳过空的或仅由空格组成的行。TrimLeft()用于删除行开头的空格(如果有的话)。第一列不能为空(因为TrimLeft()所以你甚至不需要将StringSplitOptions.RemoveEmptyEntries与额外的if (columns.Length > 1)一起使用。最后,如果文件足够小,你只需调用File.ReadAllLines()就可以在内存中读取它,并使用一点LINQ:简化一切

list.Add(
 File.ReadAllLines("test.txt")
 .Where(x => !String.IsNullOrWhiteSpace(x))
 .Select(x => x.TrimLeft().Split(new char[] { ' ' }, 2)[0]));

请注意,使用第一个参数可以指定多个有效的分隔符。

当您有多个空间时

Regex r = new Regex(" +");
string [] splitString = r.Split(stringWithMultipleSpaces);
  var splitted = System.IO.File.ReadAllLines("Test.txt")
      .Select(line => line.Split(' ')).ToArray();
  var list1 = splitted.Select(split_line => split_line[0]).ToArray();
  var list2 = splitted.Select(split_line => split_line[1]).ToArray();