我想在不使用 String.Split 方法的情况下拆分字符串 我找到了一个可能的解决方案here。我使用的代码来自第二个答案 这是我的代码:
public string[] SplitString(string input, char delimiter)
{
List<String> parts = new List<String>();
StringBuilder buff = new StringBuilder();
for (int i = 0; i < input.Length; i++)
{
if (input[i] == delimiter)
{
parts.Add(buff.ToString());
buff.Clear();
}
else
{
buff.Append(input[i]);
}
}
return parts.ToArray();
}
我的问题是,当我尝试拆分像这样的字符串时
通过“” 狗猫车人,结果包含没有最后一个的单词(在此示例中为 person )。
如果在最后一个单词之后有一个空格,则结果是正确的。
当for循环从0到 i&lt; = input.Length 时,我尝试添加类似 i == input.Length 的内容。但结果仍然没有说句 我错过了什么吗?
答案 0 :(得分:4)
退出循环后添加另一个parts.Add(buff.ToString());
- 将最后一个单词刷新到集合中。您可以在执行此操作之前检查长度,也可以通过@hvd来解释原因。
if(buff.Length != 0)
{
parts.Add(buff.ToString());
}
return parts.ToArray();
另一种方法,而不是使用StringBuilder
将是:
public static string[] SplitString(string input, char delimiter)
{
List<String> parts = new List<String>();
int start = 0;
for(int i = 0; i < input.Length; i++)
{
if(input[i] == delimiter)
{
parts.Add(input.Substring(start, i - start));
start = i + 1;
}
}
parts.Add(input.Substring(start, input.Length - start));
return parts.ToArray();
}
或使用yield return
并返回IEnumerable<string>
:
public static IEnumerable<string> SplitString(string input, char delimiter)
{
int start = 0;
for(int i = 0; i < input.Length; i++)
{
if(input[i] == delimiter)
{
yield return input.Substring(start, i - start);
start = i + 1;
}
}
yield return input.Substring(start, input.Length - start);
}
答案 1 :(得分:0)
以下是for循环后代码中缺少的内容:
for (int i = 0; i < input.Length; i++)
{
if (input[i] == delimiter)
{
parts.Add(buff.ToString());
buff.Clear();
}
else
{
buff.Append(input[i]);
}
}
// This you need to add
if (!string.IsNullOrEmpty(buff.ToString()))
{
parts.Add(buff.ToString());
}
return parts.ToArray();