2012-07-29 75 views
5

我有一个字符串,我想检查它是否以某个字符开头(在这种情况下为#)。我想知道这样做的最有效方法!检查字符串是否以TCL中的某个字符开始的最有效方法是什么?

我在想的是if {[string compare -length 1 $string "#"]},因为它可能会使用strcmp(),这可能是实现这一目标的最快方法之一。

我认为也可能是if {[string index $string 1] == "#"},因为它可能会* string =='#',这可能也会非常快。

您认为如何?

+1

虽然'string compare-length'确实使用了相当于'strncmp()'的结果,它必须比你想象的要小心,因为Tcl使用Unicode字符而不是ASCII _and_ NUL是Tcl中的合法字符串。 – 2012-07-29 14:54:47

回答

12

检查字符串是否与特定字符开头的最快方法是string match

if {[string match "#*" $string]} { ... } 

做匹配看到,有是第一个字符,然后字符串结束后明星的代码,因此停止检查$string的其余部分。它也不需要分配任何结果(除了布尔型结果之外,这是一种特殊情况,因为string match也是字节码编译的)。

+0

虽然'字符串匹配'是我能想到的最直观的事情,但了解它的效率也很有趣。我会认为它的性能会降低,因为它必须解析各种通配符和内容。那么,我现在使用'string match',谢谢! – Jerry 2012-07-29 20:17:56

+0

@Jerry:“结尾处的通配符”是匹配代码中的特例。 – 2012-07-29 21:19:57

0

是[字符串匹配“*”$ string_name]这是为我工作。与正则表达式或任何其他实用程序相比,这非常快。

相关问题