使用字符串拆分方法时设置数组的大小

本文关键字:数组 设置 字符串 拆分 方法 | 更新日期: 2023-09-27 18:34:19

我正在尝试声明一个大小为 3 的数组,然后使用 string split() 方法为数组的每个索引赋值。但是,Split() 方法似乎覆盖了数组的大小,并将其大小设置为 Split() 方法提供的子字符串数量。

这就是我所做的,

string myString = "Hello world";
string[] myArray = new string[3];
for(int i = 0; i < 3; i++)
    myArray[i] = "";
myArray = myString.Split(' ');

但是再一次,当我使用 Split() 方法时,它会覆盖我的数组的大小并将其设置为 2,这在以后会给我带来麻烦。

所以我需要知道如何使用 split 方法将字符串添加到大小为 3 的数组中。如果数组包含少于 3 个项目,我想将未分配的索引设置为 "",如果子字符串超过 3 个,那么我只想取前三个并丢弃其余的。

提前感谢任何帮助。

使用字符串拆分方法时设置数组的大小

您可以将字符串拆分的结果设置为新数组,从而循环将内容传输到原始数组。如果字符串拆分数组比原始数组长,则应将原始数组设置为新数组,以避免越界异常。

var splitArray = myString.Split(' ');
if(splitArray.Length >= myArray.Length)
{
    myArray = splitArray;
}
else
{
    for(int i = 0; i < splitArray.Length; i++)
        myArray[i] = splitArray[i];
}

只需要一点点重新夹具(更新以应对 myArray 小于 mySplitString 的情况):

string myString = "Hello world";
string[] mySplitString = myString.Split(' ');
string[] myArray = new string[3];
var loopLength = Math.min(mySplitString.length,myArray.length);
for(int i = 0; i < loopLength; i++){
    myArray[i] = mySplitString[i];
}

这是另一个想法;我在这里使用了一个名为ConsistantSplit的扩展方法。因此,您可以将字符串拆分为大小一致的数组。

    private static void Main()
    {
        string myString = "Hello world";
        var mySplitedString = myString.ConsistantSplit(' ', 5);
        Console.WriteLine(mySplitedString.Length);
        Console.ReadLine();
    }
    private static string[] ConsistantSplit(this string text, char splitter, int size)
    {
        string[] consistantSplitter = new string[size];
        var splitted = text.Split(splitter);
        if (size < splitted.Length)
            return splitted.Take(size).ToArray();
        splitted.CopyTo(consistantSplitter, 0);
            return consistantSplitter;
    }