我试图将一个字符串分割成多个字符串(列表),每个字符串都有一个最大字符限制。例如,如果我有一个500个字符的字符串,并且我希望每个字符串的最大字符数为75,那么会有7个字符串,最后一个字符串不会有完整的75个字符。
我尝试了一些在stackoverflow上找到的示例,但它们会“截断”结果。有什么想法吗?
我尝试了一些在stackoverflow上找到的示例,但它们会“截断”结果。有什么想法吗?
static class StringExtensions
{
public static IEnumerable<string> SplitOnLength(this string input, int length)
{
int index = 0;
while (index < input.Length)
{
if (index + length < input.Length)
yield return input.Substring(index, length);
else
yield return input.Substring(index);
index += length;
}
}
}
string temp = new string('@', 500);
string[] array = temp.SplitOnLength(75).ToArray();
foreach (string x in array)
Console.WriteLine(x);
我认为这个答案比其他答案更简洁:
public static IEnumerable<string> SplitByLength(string s, int length)
{
while (s.Length > length)
{
yield return s.Substring(0, length);
s = s.Substring(length);
}
if (s.Length > 0) yield return s;
}
var myString = "hello world";
List<string> list = new List();
int maxSize
while(index < myString.Length())
{
if(index + maxSize > myString.Length())
{
// handle last case
list.Add(myString.Substring(index));
break;
}
else
{
list.Add(myString.Substring(index,maxSize));
index+= maxSize;
}
}
List<string> list = new List<string>();
string s = "";
int num = 75;
while (s.Length > 0)
{
list.Add(s.Substring(0, num));
s = s.Remove(0, num);
}
public static string SplitByLength(string s, int length)
{
ArrayList sArrReturn = new ArrayList();
String[] sArr = s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string sconcat in sArr)
{
if (((String.Join(" ", sArrReturn.ToArray()).Length + sconcat.Length)+1) < length)
sArrReturn.Add(sconcat);
else
break;
}
return String.Join(" ", sArrReturn.ToArray());
}
public static string SplitByLengthOld(string s, int length)
{
try
{
string sret = string.Empty;
String[] sArr = s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string sconcat in sArr)
{
if ((sret.Length + sconcat.Length + 1) < length)
sret = string.Format("{0}{1}{2}", sret, string.IsNullOrEmpty(sret) ? string.Empty : " ", sconcat);
}
return sret;
}
catch
{
return string.Empty;
}
}
我假设可能有一个分隔符 - 比如空格字符。
在字符串(instr)上搜索,直到找到下一个分隔符的位置。
如果它小于你的子字符串长度(75),则将其附加到当前子字符串。
如果不是,则开始一个新的子字符串。
特殊情况 - 如果整个子字符串中没有分隔符 - 那么您需要定义发生什么 - 比如添加一个“-”然后继续。