簡體   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