我有一個字符串,我想檢查它是否以某個字符開頭(在這種情況下爲#)。我想知道這樣做的最有效方法!檢查字符串是否以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