我想将字符串的第一个字母与已知字符进行比较。例如,我想检查字符串"示例"的第一个字母是否与" e"匹配。或不。我确定必须有一种非常简单的方法,但我找不到它。
答案 0 :(得分:3)
一种方法是使用string index
获取第一个字符:
if {[string index $yourstring 0] eq "e"} {
...
答案 1 :(得分:1)
我认为在一个答案中收集不同的方法是个好主意。
假设
set mystring example
set mychar e
目标是测试$mystring
中的第一个字符是否等于$mychar
。
我的建议是(略有编辑):
if {[string match $mychar* $mystring]} {
...
此调用执行全局样式匹配,将$mystring
与字符$mychar
进行比较,后跟零个或多个任意字符的序列。由于算法中的快捷方式,比较在第一个字符后停止并且非常有效。
Donal Fellows:
if {[string index $mystring 0] eq $mychar} {
...
此调用专门比较由$mystring
中的第一个字符和字符串$mychar
组成的字符串。它使用高效的eq
运算符而不是==
运算符,这是旧版本Tcl中唯一可用的运算符。
构建由$mystring
中的第一个字符组成的字符串的另一种方法是调用string range $mystring 0 0
。
Mark Kadlec:
if {[string first $mychar $mystring] == 0 }
...
此调用在字符串$mystring
中搜索字符$mychar
的第一个匹配项。如果找到,则返回找到字符的索引。然后将该索引号与0
进行比较。如果它们相等,则$mystring
的第一个字符为$mychar
。
在最坏的情况下,此解决方案效率很低,其中$mystring
很长且$mychar
不会出现。然后该命令将检查整个字符串,即使只有第一个字符是感兴趣的。
另一个基于string
的解决方案:
if {[string compare -length 1 $mychar $mystring] == 0} {
...
此调用比较两个字符串的第一个 n 字符(此处 n 被硬编码为1):如果存在差异,则命令将返回-1或1(取决于字母顺序),如果它们相等,则返回0。
另一种解决方案是使用正则表达式匹配:
if {[regexp -- ^$mychar.* $mystring]} {
...
此解决方案类似于上面的string match
解决方案,但使用正则表达式语法而不是glob语法。不要忘记^
锚点,否则如果$mychar
中$mystring
出现{{1}},则调用将返回true。
答案 2 :(得分:0)
if { [string first e $yourString] == 0 }
...
答案 3 :(得分:0)
set mychar "e"
if { [string first $mychar $myString] == 0}{
....