有效地将分隔的字符连接成单词

时间:2015-04-26 15:13:37

标签: c# string

我正在开发一个基于NLP的应用程序,它使用全局键盘钩子来读取按键。这是它的工作界面:

BIEngine.Hook.KeyboardListener KListener = new BIEngine.Hook.KeyboardListener();
private void Application_Startup(object sender, StartupEventArgs e)
{
    KListener.KeyDown += new BIEngine.Hook.RawKeyEventHandler(KListener_KeyDown);
}
void KListener_KeyDown(object sender, BIEngine.Hook.RawKeyEventArgs args)
{
    Trace.WriteLine(args.ToString());
}

现在我将用户的单词作为空格,回车符,制表符,句点等分隔的字母集。因此,如果用户输入他的软件窗口got today,我将会得到

g
o
t

t..

那么最有效的方法是什么(因为这个应用程序将在后台不断运行)将这些字母连接起来形成单词sans the spaces和其他分隔符并对某些设置单词做出反应,例如,如果用户类型today,它将被传递到NLP库,并向用户呈现某种反馈。 感谢您提出任何建议,代码等。

2 个答案:

答案 0 :(得分:2)

我强烈建议您使用最简单的方法来完成您想要的操作,并且不要担心性能问题。众所周知,过早优化可能会耗费大量时间而且效益甚微。

如果你从不让字符串变得特别长(比如,~2000个字符)那么我建议你只需附加一个普通的ts(object),每当它长度超过100个字符时修剪它。我非常怀疑你能否从中观察到任何性能影响。只有当您遇到可测量的性能问题时(例如,您注意到在用户键入时,程序占用的CPU时间超过0.1%),您应该考虑对其进行优化。而且我打赌你会发现使用CPU的不是你的字符串连接,而是完全不同的东西。

为什么呢?因为如果你在出现问题之前尝试优化所有内容,那么你将永远无法完成实际的工作。大多数情况下,优化是不必要的。

说完这一切之后,按字符匹配字符串字符的最有效方法是使用有限状态机,但我觉得解释如何解决这个问题超出了这个问题的范围。

答案 1 :(得分:1)

查看你的帖子,我自动考虑使用写入而不是写入,但我不知道可能对你的实际配置产生什么影响。

这会让它保持在“同一条线”,但到底是什么?

您还可以在应用中插入块代码以执行可视或逻辑转换,然后显示或处理它。 这样,您就不必为应用启动过程添加额外的工作负载。