我使用了计时器来运行string
,也曾经使用过while
,但我想知道是否有更快的方法。我有一个包含日期序列号的字符串,日期始终在文本d|
private void Timer1_Tick(object sender, EventArgs e)
{
string caldata = textBox6.Text;
textBox7.Text = caldata.Length.ToString();
if (caldata.Substring(0, 2) == "d|")
{
// MessageBox.Show("Found date" + caldata.Substring(2, 5));
listBox1.Items.Add(caldata.Substring(2, 5));
textBox6.Text = caldata.Remove(0, 7);
caldata = textBox6.Text;
}
else
{
textBox6.Text = caldata.Remove(0, 1);
caldata = textBox6.Text;
}
if (caldata.Length < 4)
{
timer1.Enabled = false;
}
}
我包含数据的字符串看起来像附件一样。
答案 0 :(得分:1)
通常,可以通过仔细的调试和逐步执行代码来解决您的问题。
无论如何,以下是我的建议:
您可以使用正则表达式:(?<=d\|)\d{5}
说明:
(?<=d\|)
-积极的态度:断言什么是d\|
\d{5}
-匹配5位数字
代码示例
string caldata = "";
MatchCollection matches = Regex.Matches(caldata, @"(?<=d\|)\d{5}");
foreach (Match match in matches)
{
string txt = match.Value;
// ... do smoething with text
}
答案 1 :(得分:0)
“删除”和“子字符串”是非常慢的字符串操作,如果要从字符串中提取数据,则应尝试仅查找该字符串,而不要删除其周围的无关数据。
正则表达式似乎是解决问题的方法,在这种情况下,“(?! d \ |)\ d {5}”应该是最快的。
因此您的代码应如下所示:
var matches = Regex.Matches(caldata, @"(?!d\|)\d{5}");
foreach(Match m in matches)
{
listbox1.Items.Add(m.Value);
}