我有一个字符串,我想检查它是否以某个字符开头(在这种情况下为#)。我想知道这样做的最有效方法!检查字符串是否以TCL中的某个字符开始的最有效方法是什么?
我在想的是if {[string compare -length 1 $string "#"]}
,因为它可能会使用strcmp(),这可能是实现这一目标的最快方法之一。
我认为也可能是if {[string index $string 1] == "#"}
,因为它可能会* string =='#',这可能也会非常快。
您认为如何?
我有一个字符串,我想检查它是否以某个字符开头(在这种情况下为#)。我想知道这样做的最有效方法!检查字符串是否以TCL中的某个字符开始的最有效方法是什么?
我在想的是if {[string compare -length 1 $string "#"]}
,因为它可能会使用strcmp(),这可能是实现这一目标的最快方法之一。
我认为也可能是if {[string index $string 1] == "#"}
,因为它可能会* string =='#',这可能也会非常快。
您认为如何?
检查字符串是否与特定字符开头的最快方法是string match
:
if {[string match "#*" $string]} { ... }
做匹配看到,有是第一个字符,然后字符串结束后明星的代码,因此停止检查$string
的其余部分。它也不需要分配任何结果(除了布尔型结果之外,这是一种特殊情况,因为string match
也是字节码编译的)。
虽然'字符串匹配'是我能想到的最直观的事情,但了解它的效率也很有趣。我会认为它的性能会降低,因为它必须解析各种通配符和内容。那么,我现在使用'string match',谢谢! – Jerry 2012-07-29 20:17:56
@Jerry:“结尾处的通配符”是匹配代码中的特例。 – 2012-07-29 21:19:57
是[字符串匹配“*”$ string_name]这是为我工作。与正则表达式或任何其他实用程序相比,这非常快。
虽然'string compare-length'确实使用了相当于'strncmp()'的结果,它必须比你想象的要小心,因为Tcl使用Unicode字符而不是ASCII _and_ NUL是Tcl中的合法字符串。 – 2012-07-29 14:54:47