c#从两个字符串之间获取特定的字符串到list
本文关键字:字符串 list string 之间 两个 获取 | 更新日期: 2023-09-27 18:09:50
我有一些关于"从两个字符串之间找到特定字符串并进入列表"的问题。
我有一个这样的字符串:
-begin-
code:[264]
Name:[1]
Name:[2]
Name:[3]
-end-
code:[264]
Name:[1]
Name:[4]
code:[264]
Name:[6]
-begin-
Name:[6]
code:[264]
Name:[7]
Name:[8]
Name:[1]
-end-
我想把字符串"Name:"在"-begin-"到"-end-"之间分割成如下所示的List,
list<1>
Name:[1]
Name:[2]
Name:[3]
list<2>
Name:[6]
Name:[7]
Name:[8]
Name:[1]
现在我只能将"-begin-"到"-end-"之间的文本分割成列表。
int first = 0;
int last = 0;
int number = 0;
int start = 0;
do {
first = text.IndexOf("-begin-", start);
last = text.IndexOf("-begin-", first + 1);
if (first >= 0 && last >= 0)
{
number = (last - first);
AVPline.Add(text.Substring(first,number).Trim());
start = last + 1;
}
} while (position > 0);
我不知道在"-begin-"answers"-end-"之间分割文本后分割字符串"Name:"。
有人能帮我一下吗?
字符串。Split将把字符串解析为数组子字符串。然后处理子字符串。
string[] parseStr = text.Split(''n');
您可以使用枚举器和yield return
s实现更清晰和可维护的代码:
首先,让我们把签名弄对。您需要从输入字符串创建一个列表集合:public static IEnumerable<IList<string>> ProcessText(string input)
看起来是正确的。
现在,让我们的生活更容易。首先,让我们将输入字符串分成几行:
var lines = input.Split(new[] { Environment.NewLine });
现在,让我们遍历这些行,但让我们不使用foreach
来做到这一点。让我们变得更复杂一点,直接使用枚举数,原因稍后就会清楚:
using (var enumerator = lines.GetEnumerator())
{
while (enumerator.MoveNext()
{
}
}
好了,现在我们只需要找到每个子列表的开头,并相应地构建它。这容易:
while (enumerator.MoveNext()
{
if (enumerator.Current == "-begin-"
yield return createSubList(enumerator).ToList();
}
现在你知道为什么我直接使用枚举数了。这样我就可以调用另一个方法,方便地跟踪我们在输入文本中的位置:
static IEnumerable<string> createSubList(IEnumerator<string> enumerator)
{
while (enumerator.MoveNext()
{
if (enumerator.Current == "-end-")
{
yield break;
}
if (!enumerator.Current.StartsWith(...whatever strings you want to ignore))
{
yield return enumerator.Current;
}
}
}
我们做完了!让我们把它们放在一起:
public IEnumerable<IList<string>> ProcessText(string input)
{
var lines = input.Split(new[] { Environment.NewLine });
using (var enumerator = lines.GetEnumerator())
{
while (enumerator.MoveNext()
{
if (enumerator.Current == "-begin-"
yield return createSubList(enumerator).ToList();
}
}
}
private static IEnumerable<string> createSubList(IEnumerator<string> enumerator)
{
while (enumerator.MoveNext()
{
if (enumerator.Current == "-end-")
{
yield break;
}
if (!enumerator.Current.StartsWith(...whatever strings you want to ignore))
{
yield return enumerator.Current;
}
}
}
你的尝试离一个可行的解决方案不远了。
我手上只有手机,所以不能给你测试过的代码。但这是我的建议:
- 你似乎想要一个字符串列表的数组。创建一个List of List of String,因为你不知道你的数组会变成多大。你可以很容易地从列表中得到一个数组。
- 你需要一个循环。你已经有了。
- 在循环中,找到你的开始和结束。你差不多已经做到了。您应该搜索
-begin-
和-end-
- 在
-begin-
和-end-
之间获取所需的数据,并在内部(嵌套)循环中处理
嵌套循环:
- 创建字符串列表
- 取数据,以与外循环相同的方式搜索开始
Name
和结束]
。 - 将找到的元素添加到列表中。
嵌套循环后,仍在外循环内:
- 将刚刚填写的字符串列表添加到字符串列表的列表中。
外循环结束。
记得使用有效的外部循环条件。在您的示例中,您从未设置过'position'。