string 命令合集
(1) 常用的 string 命令如下表所示,其中粗体部分表示 TCL 系统命令或参数。
(2) “str1 str2 ...”、“index1 index2 ...”等,表明参数可以指定多个。
(3) 注意各个命令使用字符串变量时,格式是 **str 还是 str。一般使用 **str 时会返回新的字符串,使用 str 时不会返回新的字符串。
命令格式 | 说明 |
---|---|
string comparestr1str2 | 字符串比较,str1 大于、等于、小于时,返回值分别为 1、0、-1。 |
string equalstr1str2 | 字符串比较,严格相同返回 1,否则返回 0。可以指定 -nocase 选项,不区分大小写比较。也可以指定 -length 进行定长比较。 |
string index $str index | 返回索引的字符 |
string range $str index1 index2 | 返回指定索引范围为 index1~index2 内的字符串 |
string replace $str index1 index2 newStr | 将索引范围为 index1~index2 的字符串替换为 newStr,如果没有指定新字符串则完成删除功能 |
string mapcharMapstr | 根据字典型变量 charMap 键值对的关系,将 str 中的字符作为键进行映射 |
string length $str | 返回字符串的字符长度 |
string repeat $str times | 字符串重复多次组成新的字符串变量 |
string reverse $str | 返回与字符串 str 顺序相反的字符串 |
string tolower $str | 返回小写字符 |
string toupper $str | 返回大写字符 |
string firststr1str2 | 返回 str1 在 str2 中第一次出现的位置索引 |
string laststr1str2 | 返回 str1 在 str2 中最后一次出现的位置索引 |
string trim $str chars | 删除字符串两端的 chars,默认删除空白 |
string trimleft $str chars | 删除字符串左侧开始的 chars,默认删除空白 |
string trimright $str chars | 删除字符串右侧开始的 chars,默认是空白 |
string wordend $str index | 返回在索引位置的单词之后的字符索引位置 |
string wordstart $str index | 返回在索引位置的单词中第一个字符的索引位置 |
string is class $str | 判断字符串的类型 |
string match pattern str | 字符串匹配模式,匹配成功则返回 1 |
字符串操作举例
举例:string compare/equal
TCL 中使用 string equal 进行字符串是否相等的比较。严格相等返回值为 1,否则为 0 。
可选项 -nocase 指定比较时不区分大小写,可选项 -length 指定字符串长度进行比较。
set str_ref "abcd"
set str_comp1 "abce"
set str_comp2 "ABCd"
# 以下两种方式不等
puts [string equal $str_ref $str_comp1]
puts [string equal $str_ref $str_comp2]
#以下两种方式相等
puts [string equal -length 3 $str_ref $str_comp1]
puts [string equal -nocase $str_ref $str_comp2]
#% 0
#% 0
#% 1
#% 1
string compare 不仅能比较是否相等,还能比较 2 个字符串大小(按照 ASCII 字符排列)。当两个字符串间的关系为大于、等于、小于时,返回值分别为 1、0、-1。
也可以使用 -nocase、-length 选项。
set str_ref "abcd"
set str_comp1 "abce"
set str_comp2 "ABCd"
# abcd < abce
puts [string compare $str_ref $str_comp1]
# abcd > ABCd
puts [string compare $str_ref $str_comp2]
# 以下相等
puts [string compare -length 3 $str_ref $str_comp1]
puts [string compare -nocase $str_ref $str_comp2]
#% -1
#% 1
#% 0
#% 0
举例:string index/range
string index 用于访问字符串中的单个字符,string range 用于访问字符串中指定范围内的多个字符。
set str "Forever young."
puts "3rd char: [string index $str 3]"
puts "3-6 char: [string range $str 3 6]"
#% 3rd char: e
#% 3-6 char: ever
举例:string replace/map
string replace 可以将指定索引范围内的字符串替换为新的字符串。
如果没有指定新字符串则完成删除功能。
set str "Forever young."
# 替换 young -> happy , young -> sad
puts "[string replace $str 8 end-1 "happy"]"
puts "[string replace $str 8 end-1 "sad"]"
# 删除 young
puts "[string replace $str 8 end-1]"
#% Forever happy.
#% Forever sad.
#% Forever .
string map 根据指定字典型变量中键值对的关系,将相应的字符串进行映射替换。原字符串中的字符相当于字典中的键,新字符串替换后的值为字典中键对应的值。
替换时按照字典型变量中键出现的顺序进行映射替换,剩余字符串中没有与键匹配的字符,则保留原字符(串)。
set str "Forever young. Bless you."
set char_map [dict create Forever 22 \\
" " 33 \\
"young" 44 ]
puts "[string map $char_map $str]"
#% 223344.33Bless33you.
举例:string length/repeat/reverse
string length/repeat/reverse 具有计算长度、重复字符串、反转字符串的功能。
set str "Hello, Zhihua"
puts [string repeat $str 2]
puts [string length $str]
puts [string reverse $str]
#% Hello, ZhihuaHello, Zhihua
#% 13
#% auhihZ ,olleH
举例:string tolower/toupper
string tolower/toupper 分别返回字符串的小写、大写格式。
puts [string tolower AbcD]
puts [string toupper AbcD]
#% abcd
#% ABCD
举例:string first/last
string first **str1 **str2 startindex
string first 用于查找第一个字符串在第二个字符串中的位置,并返回第一个匹配的索引值。命令结尾还可以指定开始查找的索引,即查找范围为 str2 索引之后的字符串。
string last **str1 **str2 endindex
string last 用于查找第一个字符串在第二个字符串中的位置,并返回最后一个匹配的索引值。命令结尾还可以指定结束查找的索引,即查找范围为 str2 索引之前的字符串。
#index 2 7 12
set str "Abab 3cab acabb"
puts [string first ab $str]
puts [string first ab $str 5]
puts [string last ab $str]
puts [string last ab $str 10]
#% 2
#% 7
#% 12
#% 7
举例:string trim/trimleft/trimright
string trim/trimleft/trimright $str chars
根据指定的多个字符 chars,string trim/trimleft/trimright 依次删除字符串 $str 两端、左侧、右侧的字符。只要字符串两端、左侧、右侧的字符存在于指定的 chars 中,则会依次被删除,直至遇到不存在与 chars 中的字符。
如果没有指定 chars 选项,则默认删除空格、制表符、换行符。
set str " abccICbcc "
# 默认删除两边空格
puts [string trim $str]
# 指定 chars 时不要忘记输入空格
puts [string trim $str "abc "]
# 默认删除左边空格
puts [string trimleft $str]
# 指定 chars 时没有输入空格,则字符串不会改变
puts [string trimleft $str "abc"]
# 默认删除右边空格
puts [string trimright $str]
puts [string trimright $str "bca "]
#% abccICbcc
#% IC
#% abccICbcc
#% abccICbcc
#% abccICbcc
#% abccIC
举例:string wordend/wordstart
string wordend 返回字符串中包含索引字符的单词的下一个单词的首个字符的索引。
string wordstart 返回字符串中包含索引字符的单词的首个字符的索引。
此命令下,任何连续的字符数字或者下划线,或者除此之外的单个字符,例如空格,都被视为一个单词。
下列示例中,变量有 3 个单词:For_ever、空格、Young。
# index 0123456789
set str "For_ever Young"
puts [string wordend $str 2]
puts [string wordend $str 8]
puts [string wordend $str 10]
puts [string wordstart $str 2]
puts [string wordstart $str 8]
puts [string wordstart $str 10]
#% 8
#% 9
#% 14
#% 0
#% 8
#% 9
举例:string is
string is class -strict -failIndex var $str
string is 命令用于判断字符串的类型,如果字符串符合 TCL 中指定字符类型 ,则返回值为1 ,否则为 0。
当指定 -strict 选项时,对于所有 class 字符类型,当字符串为空时返回值为 1。如果不指定,遇到空字符串时返回值为 1 。
当指定了 -failIndex var 选项时,该命令会把第一个不符合 class 类别字符的索引保存到变量 var 中。如果返回值为1,则不进行赋值操作。但是当 class 为 boolean、ture 或 false 类型时,如果返回值为 0 ,var 会被设置为0。
这里简单介绍下 Unicore 码:统一码,又称单一码(Unicode),它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。而大多数计算机采用 ASCII 码是表示所有大小写字母、数字、标点符号和控制字符的 7 位编码方案。统一码包含 128 个 ASCII 码字符。
TCL 字符串系统类型 class 取值如下。
alpha | Unicore 字母 | double | 双精度浮点型,可以包含空格 |
---|---|---|---|
alnum | Unicore 字母或数字 | list | 有效的列表结构 |
ascii | ASCII 字符 | boolean | 布尔型值 |
lower | Unicore 小写字母 | true | 布尔型值:真 |
upper | Unicore 大写字母 | false | 布尔型值:假 |
wordchar | 字母数字或连接符 | control | Unicore 控制字符 |
digit | Unicore 数字 | graph | 除空格外的 Unicore 打印字符 |
xdigit | 十六进制字符 | 包含空格的 Unicore 打印字符 | |
integer | 32 位整数型 | punct | Unicore 的标点符号 |
wideinteger | 64 位长整数型 | space | Unicore 的空白字符 |
现在对各种 class 类型进行举例说明,返回值均为 1 。
string is alpha "ăéαß以及汉字"
string is alnum "1234ăéαß以及汉字"
string is ascii "Forever"
string is lower "forever"
string is upper "FOREVER"
string is wordchar "Stu_No3"
string is digit 1234
string is xdigit "\\x33"
string is integer 1234
string is wideinteger 1234
string is double 1e-3
string is list {Forever Young .}
string is boolean yes
string is true 1
string is false false
string is control \\n
string is graph "£±²"
string is print " £±² "
string is punct "。\\/"
string is space " "
下面为返回值均为 0 的几个简单示例。
string is alpha "1234ăéαß以及汉字"
string is ascii "。"
string is lower "Forever"
string is digit 123.45
string is punct " 。\\/ "
string is space "a b c"
下面是 -strict 选项的简单示例。
string is alpha ""
string is integer ""
string is alpha -strict ""
string is integer -strict ""
#% 1
#% 1
#% 0
#% 0
下面是 -failindex 选项的简单示例。
set str "MaryIs32."
string is alpha -failindex index $str
puts "Failed index: $index"
puts "Failed char: [string index $str $index]"
Failed index: 6
Failed char: 3
字符串匹配(string match)将在下一节说明。
全部0条评论
快来发表一下你的评论吧 !