我試圖將字符串拆分成許多字符串(列表),每個字符串的最大限制。所以說如果我有500個字符的字符串,並且我希望每個字符串的最大值爲75,那麼將會有7個字符串,並且最後一個字符串不會有完整的75.分割字符串與最大字符數限制
我試過一些我在stackoverflow上找到的例子,但他們'截斷'的結果。有任何想法嗎?
我試圖將字符串拆分成許多字符串(列表),每個字符串的最大限制。所以說如果我有500個字符的字符串,並且我希望每個字符串的最大值爲75,那麼將會有7個字符串,並且最後一個字符串不會有完整的75.分割字符串與最大字符數限制
我試過一些我在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);
我會用循環使用C#String.Substring方法解決這個問題。
請注意,這不是確切的代碼,但你明白了。
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;
}
}
您仍然需要添加最後一個小於75個字符的字符串;) – 2010-06-21 00:32:34
對不起,這是//註釋的用途。我只是在懶惰:) – Alan 2010-06-21 00:35:59
我假設可能是分隔符 - 象空間字符。
搜索字符串(instr),直到找到分隔符的下一個位置。
如果這是<您的子字符串長度(75)然後附加到當前子字符串。
如果沒有,則啓動一個新的子字符串。
特殊情況 - 如果整個子字符串中沒有分隔符 - 那麼您需要定義會發生什麼 - 就像添加一個' - '然後繼續。
當你說分裂時,你指的是分裂功能?如果沒有,像這樣將工作:
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 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;
}
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;
}
}
不串有一子的方法? – 2010-06-21 00:27:12
如果你提供了幾個測試用例來證明你在找什麼,它會對我有所幫助。 – 2010-06-21 00:34:41