2012-07-29 53 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]這是爲我工作。與正則表達式或任何其他實用程序相比,這非常快。

相關問題