繁体   English   中英

将字符串拆分为具有特定数量元素的数组,c#

[英]splitting string into array with a specific number of elements, c#

我有一个字符串,其中包含由行(\\ n)分隔的有序术语的数量,如下例所示:(注意,我拥有的字符串是字符串数组的元素)

term 1
term 2
.......
.......
term n

我想分割一定数量的术语,让我们只说(1000)并弃掉其余的术语。 我正在尝试以下代码:

string[] training = traindocs[tr].Trim().Split('\n');
                List <string> trainterms = new List<string>();
                for (int i = 0; i < 1000; i++)
                {
                    if (i >= training.Length)
                        break;
                    trainterms.Add(training[i].Trim().Split('\t')[0]);
                } 

我可以在不使用List或任何其他数据结构的情况下执行此操作吗? 我的意思是直接将特定数量的术语提取到数组(训练)中? 提前致谢。

LINQ怎么样? .Take()扩展方法似乎适合你的账单:

List<string> trainterms = traindocs[tr].Trim().Split('\n').Take(1000).ToList();

根据MSDN,您可以使用split方法的重载版本。

public string [] Split(char [] separator,int count,StringSplitOptions options)

参数

separator类型:System.Char []一个Unicode字符数组,用于分隔此字符串中的子字符串,一个不包含分隔符的空数组或null。

count类型:System.Int32要返回的最大子串数。

options类型:System.StringSplitOptions StringSplitOptions.RemoveEmptyEntries,用于从返回的数组中省略空数组元素; 或StringSplitOptions.None在返回的数组中包含空数组元素。

回报价值

类型:System.String []一个数组,其元素包含此字符串中的子字符串,这些子字符串由分隔符中的一个或多个字符分隔。 有关更多信息,请参阅“备注”部分。

所以像这样:

String str = "A,B,C,D,E,F,G,H,I";
            String[] str2 = str.Split(new Char[]{','}, 5, StringSplitOptions.RemoveEmptyEntries);
            System.Console.WriteLine(str2.Length);
            System.Console.Read();

会打印: 5

编辑:经过进一步调查,似乎count参数只是指示何时分裂停止。 字符串的其余部分将保留在最后一个元素中。

因此,上面的代码将产生以下结果: [0] = A, [1] = B, [2] = C, [3] = D, [4] = E,F,G,H,I ,这不是你似乎追求的东西。

要解决这个问题,您需要执行以下操作:

String str = "A\nB\nC\nD\nE\nF\nG\nH\nI";
            List<String> myList = str.Split(new Char[]{'\n'}, 5, StringSplitOptions.RemoveEmptyEntries).ToList<String>();
            myList[myList.Count - 1] = myList[myList.Count - 1].Split(new Char[] { '\n' })[0];
            System.Console.WriteLine(myList.Count);
            foreach (String str1 in myList)
            {
                System.Console.WriteLine(str1);
            }
            System.Console.Read();

上面的代码只保留前5个(在您的情况下为1000)元素。 因此,如果你愿意的话,我认为达林的解决方案可能会更清晰。

如果你想要最有效(最快)的方式,你必须使用String.Split重载,传递所需的项目总数。

如果您想轻松,请使用LINQ。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM