首页 > 其他分享 >字符串

字符串

时间:2024-04-12 16:56:26浏览次数:11  
标签:字符 string scan format str 字符串

1. 基本命令集 

Tcl 将所有的变量值视作字符串,并将他们作为字符串来保存。下表列出了字符串操作的几个常用命令。 

命令 描述
append 将值追加到字符串尾
binary 二进制字符串操作
format 字符串格式化
regexp 正则表达式(用于字符串模式匹配)
regsub 用正则表达式进行字符串模式匹配和替换
scan 字符串分解
string options 字符串操作和命令集
subst 字符替代(替代特殊字符)

2. append 命令 

append 命令比较简单,它将一段字符串连接到另一字符串尾部从而组成新的字符串。此命令对变量直接修改。 

语法:

  • append varName ?value? 

示例:

  • set var1 Hello

  • set var2 world

  • append var1 $var2

    •  => helloWorld

  • puts $var1

    •  => helloWorld      #var1的内容被更改

3. format命令

format 命令和 C 语言中的 printf 和 sprintf 命令类似。它根据一组格式说明来格式化字符串。此命令不会改变被操作字符串的内容。 

语法:

  • format spec value1 value2 ... 

spec:spec 变元包含了格式说明关键词和附加文字。使用%来引入一个关键词,后跟 0 个或者多个修饰符,然后使用一个转换格式符结尾。 

关键词的基本格式是“ %aaaB”: aaa 是修饰符, B 代表一种格式转换符。例如%f 用于将对应位置的参数转化为浮点数。 如果要使用”%”号,则可以使用%%来实现。否则会将%后的字符作为关键词来处理。 

valueX:valueX 是变元。对每个变元来讲,其关键词可多达 6 部分:

  • 位置说明符;
  • 标志;
  • 字段宽度;
  • 精度;
  • 长度;
  • 转换符。

转换符之外的关键词都可以看作修饰符。

格式转换符:

字符 说明
d 有符号整数
u 无符号整数
i 有符号整数。变元可以是十六进制( 0x)或八进制(0)格式
o 无符号八进制数
x 或 X 无符号十六进制数
c 将整数映射到对应的 ASCII 字符
s 字符串
f 浮点数
e 或 E 科学记数法表示的浮点数
g 或 G 以%f 或%e 格式(要短一些)来表示的浮点数

格式标志符:

标志 说明
- 使字段左对齐
+ 字段右对齐
space 在数字前加一个空格,除非数字带有前导符号。这在将许多数字排列在一起时非常有用
0 使用 0 作为补白
# 前导 0 表示八进制,前导 0x 表示十六进制数。浮点数中总要带上小数点。不删除末尾的 0(%g)

位置说明符:i$表示从第 i 个变元取数值而不是根据通常的位置对应关系对应的变元。位置记数从 1 开始。 

位置说明符示例:

  • set res [format "%2\$s" 1 5 9]  #\用来引用符号$,位置说明符的格式为2$,即取第二个元素5

    •  => 5

  • puts $res

    •  => 5

  • set str [format "%3\$s  %1\$s  %2\$s"  "are" "right" "You"]

    •  => You are right

其它示例:

  • format "%x" 20 #将20转换为16进制数

    •  => 14

  • format "%8x" 20 #将20转换为16进制数,8位数据宽度右对齐

    •  =>  14

  • format "%08x" 20 #将20转换为16进制数,8位数据宽度,用0添齐

    •  => 00000014

  • format "%-8x" 20 #将20转换为16进制数,8位数据宽度,左对齐

    •  => 14

  • format "%#08x" 20 #将20转换为16进制数,并添加前缀0x,总宽度为8,右对齐(默认),前导空格用0补齐

    •  => 0x000014

4. scan命令

scan 命令根据格式描述符来解析一个字符串并将对应值赋给后面的变量。返回成功转换的个数。

语法:

  • scan string format var? var? .... 

scan 的格式描述几乎与 format 相同,但不用%u 格式。 %c 的作用与 format 中的相反,是将一个 ASCII 字符转换为对应的整数值。

应该注意 scan 命令中位置顺序和 format 中的不一样。 format 将多个目标变量转换成一个字符串,而 scan 则可将一个字符串分解为多个变量。 

如果 scan 命令中,没有指定输出变量,则它不返回成功转换个数,而是返回成功转换的结果。

示例:

  • set num [scan "abcABC"  "%c%c"  var1  var2]

    •  => 2

  • puts "$var1 $var2"

    •  => 97 98

  • set num [scan "abcABC"  "%c%c"]

    •  => 97 98

  • puts $num

    •  => 97 98

  • scan "abcABC"  {%[a-z]} res  #格式描述说明要扫描小写的 a 到 z 区间的连续字符,用到了花括号表明是一个集合 

    •  => 1

  • puts $res

    •  => abc

  • scan "ABCabc"  {%[A-b]} res

    •  => 1

  • puts $res

    •  => ABCab

  • scan "ABCab" {%[^a-b]} res  #匹配非a-b的字符, 字符^说明匹配所有不在集合中的字符 

    •  => 1

  • puts $res

    •  => ABC

  • scan "ABCab" {%2[^a-b]} res #指定匹配字符数

    •  => 1

  • puts $res

    •  => AB

5. subst 命令 

subst 命令在字符串中搜索方括号[]、美元符号$和反斜杠\,并对其进行替换操作,而对其他数据不做处理。字符串内部的花括号对这种替换操作不阻止。 

示例:

  • subst {a = $a  sum = [expr  1 + 2]}

    •  => a = foo bar  sum = 3

  • subst {a = {$a}  sum = {[expr  1 + 2]}}

    •  => a = {foo bar}  sum = {3}

6. string命令

6.1 string命令列表

下表给出了各种 string 命令语法格式和说明:

命 令 说 明
string bytelength str 返回用于存储字符串的字节数。
string compare ?-nocase? ?- length len? str1 str2 根据词典顺序比较字符串。 -nocase 选项表示大小写无关。 -length 选项表示只比较指定长度的开头部分字符。如果字符串相同就返回0(str1=str2),如果 str1 的顺序比 str2 靠前就返回-1( str1<str2),其他情况返回 1(str1>str2)。
string equal ?-nocase? str1 str2 比较字符串,相同返回 1,否则返回 0。
string first str1 str2 返回在 str2 中 str1 第一次出现的索引位置,如果没有找到则返回-1
string index str index 返回指定位置的字符。 index 号从 0 开始。如果 index 为 end 则返回最后一个字符。
string is class ?-strict? ?-failindex varname? str 判断字符串的类型,如果是指定类型就返回 1。字符类型例如有整型、布尔型等等。如果使用了-strict 则表示不匹配空字符,否则总是匹配的。如果指定了 failindex 则将 string 中非 class 的字符索引赋给varname 变量。
string last str1 str2 返回 str2 在 str1 最后一次出现的位置索引。没有搜索到就返回-1。
string length str 返回 str 中的字符个数
string map ?-nocase? charMapstr 返回根据 charMap 中输入、输出列表将 str 中的字符进行映射后而产生的新字符串。参见本节“字符串映射”部分。
string match pattern str 如果 str 匹配 pattern 就返回 1,否则返回 0。使用的是通配风格的匹配。参见本节的“字符串的匹配”部分。
string range str index1 index2 返回 str 中从 index1 到 index2 之间的字符串。
string repeat str count 返回将 str 重复 count 次的字符串。
string replace str firstlast ?newstr? 将从 first 开始到 last 结束的一段字符串替换为 newstr 字符串。如果newstr 没有,则这部分字符串内容会被删除。
string tolower str ?first? ?last? 将指定范围的字符转化为小写格式。
string totile str ?first? ?last? 通过将第一个字符替换为 Unicode 的标题型字符或大写形式,而其余的替换为小写形式的方法将 str 转换为开始字母大写形式。可以用参数指定操作范围。
string toupperstring ?first? ?last? 将指定范围的字符转化为大写形式。
string trim str ?chars? 从 str 两端删除 chars 中指定的字符。 chars 默认为空字符。
string trimleft str ?chars? 从 str 开头删除 chars 中指定的字符。 chars 默认为空字符。
string trimright str ?chars? 从 str 结尾删除 chars 中指定的字符。 chars 默认为空字符。
string wordend str index 返回 str 中在索引位置 index 包含字符的单词之后的字符的索引位置。
string wordstart str index 返回 str 中在索引位置 index 包含字符的单词中第一个字符的索引位置

说明: 命令中的两个问号之间的内容是任选项,表示根据实际需要可选的内容。 

标签:字符,string,scan,format,str,字符串
From: https://www.cnblogs.com/love-9/p/18131643

相关文章

  • 字符串占位符替换——StringSubstitutor
    1背景众所周知Java中的字符串占位符替换非常不友好,无论是String#format还是MessageFormat#format都只能说能用,但说不上好用,关于以上两种字符串格式化的用法请参考:JavaStringformat和MessageFormatformat,本文推荐org.apache.commons.text.StringSubstitutor,StrSubstitutor是......
  • 二维字符串数组的传参时与指针互转时的问题
    二维数组如何传参二维字符串数组,转char**会导致的问题,以及编译报错要想得到正确的结果,需要按如下方式去写传参:#include<stdio.h>#include<string.h>//intchar_arr_copy(char**dest)//这样定义传参类型将导致编译报错,在低版本的编译器下或者没有报错但是得不到正确......
  • JSON.parse() 方法中里面有函数,转化完成后是字符串问题
    要将JSON字符串中的函数还原回原来的函数对象,你可以使用JSON.parse()方法,并提供一个reviver函数来将字符串表示的函数重新转换为函数对象。以下是你可以使用的代码示例:varobj={"name":"Runoob","alexa":function(){return10000;},"site":"www.runoob.com"};//......
  • String类型转LPCTSTR -----理解C++中的字符串类型转换
    在看代码时,发现有时候会把string类型转换为LPCTSTR,刚开始不理解为什么要做这个转换,所以做了一些调查,现在记录如下是这样的,STRING是代表C++中的字符串string,而LPCTSTR代表的是Windows系统中的字符串类型。也就是说,这样转换的目的是为了把C++中的字符串string转换为Windows系......
  • C#长sql语句换行(长字符串换行且换行符不计入字符串中)
    示例:在红圈处敲回车vs会将其分段并拼接,这不是我想要的效果、不仅不美观还不好复制sql语句只需要在字符串前加一个@号就可以解决......
  • StringHelper--字符串左右添加指定字符
    StringHelper--字符串左右添加指定字符1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Configuration;4usingSystem.Linq;5usingSystem.Text;6usingSystem.Threading.Tasks;78namespaceHRMessageApp.Helper9{10publiccla......
  • java中字符串替换的4种方法 replaceAll() 带正则表达式参数 str.replaceAll("[0-9]+
    java中字符串替换的4种方法replaceAll()带正则表达式参数str.replaceAll("[0-9]+","");目录前言一、String的replace()方法二、String的replaceAll()方法三、StringBuffer/StringBuilder的replace()方法四、Matcher的replaceAll()方法总结前言在日常开发中,我们对......
  • 算法训练营Day08-LeetCode344. 反转字符串 && 541. 反转字符串 II && 151. 反转字符串
    344.反转字符串题目链接:LeetCode344.反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题思路:字符串首尾字符交换即可完成反转。定......
  • 输入流和字符串互转InputStream2String和String2InputStream
    输入流转字符串12345678910111213141516171819public static StringInputStream2String(InputStreamin){    InputStreamReaderreader= null;    try {        reader= new InputStreamReader(in, "UTF-8");   ......
  • java代码将16进制字符串转换为图片,jdbc入库blob字段,解决ORA-01704,PLS-00172,ORA-06550,
    从Oracle导出SQL文件中的insert语句包含blob字段,语句HEXTORAW函数将16进制的字符串入库,由于字符串太长,insert失败下面的代码读取完整的insert语句,将HEXTORAW函数连同16进制的字符串替换为NULL,先将字段置空插入记录,然后使用PreparedStatement对图片文件读流更新入库importorg.......