如何根据字符长度拆分字符串

时间:2011-02-25 12:37:53

标签: c#

我有一个字符串,说有3000个字符,现在我想把它分成数组,每个索引保存不超过500个字符,我没有得到相同的逻辑。我尝试了下面的一个,但它不起作用..

说字符串arr持有3000个字符......

我正在使用循环来获取字符长度为500

这里我将循环返回的值存储在数组中......

ArrayList ar = new ArrayList();

for(int i=0; i < arr.Length; i+=500)
{
    ar.Add(arr.Substring(i,500));
}  

Response.Write(ar[0].ToString());

但是会抛出一条错误消息

  

索引和长度必须指代字符串中的位置。

请回复相应的相应代码,我们将非常感谢任何回复。

8 个答案:

答案 0 :(得分:7)

几点:

你可能需要测试“i&lt; arr.length - 1”,当你到达终点时,字符串的最后一个索引是2999,长度是3000.

您还可能需要概括终点,因为您假设字符串是500长的整数。如果你的字符串是2900长,那么最后一个字符串应该是arr.Substring(i,400)。

也许试试

for(int i=0; i < arr.Length; i+=500)
{
    ar.Add(arr.Substring(i, Math.Min(arr.length - i,500)));
}  

答案 1 :(得分:2)

问题是你的arr-string并不总是500长。如果你到了最后,它可能只有300个字符长。试图将500个字符串子串起来将导致超出范围的错误。

你应该检查arr的长度。如果它比你的500-charlength字符串短,你应该只取整个字符串,而不是试图进一步对其进行子串。

答案 2 :(得分:0)

更改为

for(int i=0; i < arr.Length-1; i+=500)
{
    ar.Add(arr.Substring(i,500));
} 

答案 3 :(得分:0)

尝试更改为

for(int i=0; i < arr.Length; i+=500)
{
    int len=500;
    if(arr.Length<i+500)
    {
        len=arr.Length;
    }
    ar.Add(arr.Substring(i,len));
}

答案 4 :(得分:0)

试试这个......

    static void Main(string[] args)
    {
        StringBuilder sb = new StringBuilder();
        string str = string.Empty;

        for (int i = 0; i < 3001; i++)
            sb.Append("a");

        str = sb.ToString();

        ArrayList arrayList = new ArrayList();
        int length = str.Length;
        int size = 500;
        int start = 0;

        while (length > 0)
        {
            if (length >= size)
                arrayList.Add(str.Substring(start, size));
            else
                arrayList.Add(str.Substring(start, length));

            start += size;
            length -= size;
        }

        Console.Write(arrayList[0].ToString());
    }

答案 5 :(得分:0)

string str = "Sample Text";

        List<string> lst = new List<string>();
        while (str.Length > 500)
        {
            var temp = str.Substring(0, 500);
            str = str.Remove(0, temp.Length);
            lst.Add(temp);
        }

        lst.Add(str);

        string[] arrayString = lst.ToArray();
        Console.ReadLine();

答案 6 :(得分:0)

除了给定的答案,这里还有另一种方法:

List<string> ar = new List<string>();

int charcount = 500;
int index = 0;
do
{
    ar.Add(new string(input.Skip(index).Take(charcount).ToArray()));
    index += charcount;
} while (index < input.Length);

首先,它使用List<string>代替ArrayListArrayList以相同的方式不是类型安全的,基本上不应该使用;它仍然主要是出于向后兼容的原因)

其次,由于String实现了IEnumerable<char>,因此可以使用LINQ扩展。因此,我使用SkipTake将字符串切成500个字符的数组,这些数组将转换为字符串并添加到列表中。

答案 7 :(得分:0)

嘿伙计们,我有一个简单的解决方案,正如“J. Vermeire”所说,我的字符串最后从不有500个字符,它可能不到300,这就是为什么应用程序抛出一个误差..

所以应用这个逻辑我做了一个简单的循环,可以检查字符串的当前长度是什么,并相应地设置输出....这里我们去..

这里我们假设string str包含34905个字符。

for(int i=0; i < str.Length; i += 500)
{
    if (str.Length > i+500)
    {
         Response.Write(str.Substring(i, 500));
    }
    else
    {
         Response.Write(str.Substring(i, str.Length-i));
    }

}

这已经完成了我的任务..感谢“J. Vermeire”给出了你的逻辑,它的所有功劳......非常感谢。