我想通过以下方式拆分字符串:
string s = "012345678x0123x01234567890123456789";
s.SplitString("x",10);
应该分成
012345678
x0123
x012345678
9012345678
9
例如,输入字符串应在字符“ x”或长度10之后分割(以先到为准)。
到目前为止,这是我尝试过的:
public static IEnumerable<string> SplitString(this string sInput, string search, int maxlength)
{
int index = Math.Min(sInput.IndexOf(search), maxlength);
int start = 0;
while (index != -1)
{
yield return sInput.Substring(start, index-start);
start = index;
index = Math.Min(sInput.IndexOf(search,start), maxlength);
}
}
我个人不喜欢RegEx。它创建的代码很难调试,并且很难弄清您初次看时要做什么。因此,对于更长的解决方案,我将采用类似的方法。
public static IEnumerable<string> SplitString(this string sInput, char search, int maxlength)
{
var result = new List<string>();
var count = 0;
var lastSplit = 0;
foreach (char c in sInput)
{
if (c == search || count - lastSplit == maxlength)
{
result.Add(sInput.Substring(lastSplit, count - lastSplit));
lastSplit = count;
}
count ++;
}
result.Add(sInput.Substring(lastSplit, count - lastSplit));
return result;
}
注意我将第一个参数更改为char(从字符串)。该代码可能可以进行更多优化,但是它很好且可读,对我来说更重要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句