我有一个字符串,说有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());
但是会抛出一条错误消息
索引和长度必须指代字符串中的位置。
请回复相应的相应代码,我们将非常感谢任何回复。
答案 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>
代替ArrayList
(ArrayList
以相同的方式不是类型安全的,基本上不应该使用;它仍然主要是出于向后兼容的原因)
其次,由于String
实现了IEnumerable<char>
,因此可以使用LINQ扩展。因此,我使用Skip
和Take
将字符串切成500个字符的数组,这些数组将转换为字符串并添加到列表中。
答案 7 :(得分:0)
所以应用这个逻辑我做了一个简单的循环,可以检查字符串的当前长度是什么,并相应地设置输出....这里我们去..
这里我们假设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”给出了你的逻辑,它的所有功劳......非常感谢。