计算字符串的长度
strlen函数形式
str = 123我
num := strlen(str)
msgbox , % num
StringLen命令形式
str = 123我
StringLen,num,str
msgbox,% num
注意这里是返回的长度为4个,中文字符"我"被当做一个字符来计算。这里计算的是字符的显示个数,而非占用的存储空间。
字符串拼接
拼接的方法很简单,直接将两个字符串用空格隔开就可以了
a:= "abc"
b := 123
;c显示出来为abc123
c := a b
msgbox,% c
c显示出来为abc123
但若是ab拼接时均未数值型变量的话,其可以直接将数字连接到一起,例如a=100,b=200,ab拼接到一起的话就是100200,很是神奇!可以说,autohotkey的语法真的是太随心所欲了。
a := 100
b := 200
; c 的值是 100150
c := a b - 50
msgbox,% c
如何遍历字符串
Loop, Parse, InputVar [, Delimiters, OmitChars]
loop是循环,parse是命令,解析字符串,inputVar是对应的需要遍历的字符串
Delimiters是以什么字符为分隔符,OmitChars是指定要忽略的字符。
若是不填参数,会依次跳出来a b c d四个字符串。
遍历每一个字符
text := "abcd"
Loop, Parse, text
{
MsgBox, %A_LoopField%
}
遍历一段文字中的每一行
text =
(
line1
line2
line3
)
msgbox,% text
Loop, Parse, text, `n, `r
{
MsgBox, %A_LoopField%
}
这个是以`n为分隔符来进行遍历的。`r又是什么呢?
在类UNIX操作系统中,文本中的换行符就是`n,但在Windows中,换行符是`r`n。如果处理一段换行符是`r`n的文本,直接用`n分割,会保留多余的`r,所以设置OmitChars为`r,可以将`r来去掉
以空格为分隔符遍历文本
text := "ab c d"
Loop, Parse, text, %A_Space%
{
MsgBox, %A_LoopField%
}
以逗号为分隔符遍历文本
text := "ab c,d,e"
Loop, Parse, text, `,
{
; 依次弹出
; a b
; c d:xxx
MsgBox, %A_LoopField%
}
注意在autohotkey语法里,逗号是特殊字符,因此这里需要加一个转义字符`。
以冒号为分隔符遍历文本
text := "ab c,d,e,:1234"
Loop, Parse, text, :
{
; 依次弹出
; a b,c d
; xxx
MsgBox, %A_LoopField%
}
以特定字符串为分割遍历文本
text := "abc()bcd(cde"
text := StrReplace(text, "()", "@") ;将括号来先换成一个原来的字符串中没有出现过的字符
Loop, Parse, text, @
{
; 依次弹出
; abc
; bcd(cde
MsgBox, %A_LoopField%
}
转义字符
a = `,`{
msgbox,% a
有些符号,在autohotkey里面是特殊符号,不能直接使用因此需要添加转义符号,上面这段代码运行之后输出的值为 ,{
检测字符串是否为空
a := ""
if (a = "")
{
msgbox,a为空字符串
}
else
{
msgbox,a不是空字符串
}
查找一个字符串中是否包含另一个字符串
FoundPos := InStr(Haystack, Needle [, CaseSensitive = false, StartingPos = 1, Occurrence = 1])
Haystack是被查找的字符串(长的),
Needle是待查找的字符串(短的),
CaseSensitive用于设置是否区分大小写,
StartingPos是设置开始查找的位置(1为从头开始,如果是0或者负数,将逆序查找),
Occurrence指查找几次(比如Occurrence是2,那么即使Haystack里面有一个Needle,也会因为没有第2个Needle而返回0)
InStr函数的返回值是Needle在Haystack的位置,从1开始,如果返回0,说明没找到。
position := InStr("123abc789","abc")
msgbox,% position
上面的位置返回的为4
Haystack := "The Quick Brown Fox Jumps Over the Lazy Dog"
Needle := "the"
MsgBox % InStr(Haystack, Needle, false, 1, 1) ; 不区分大小写的搜索, 返回第1次匹配的位置,即1。
MsgBox % InStr(Haystack, Needle, true) ; 区分大小写的搜索, 返回首次匹配的位置, 也是返回32的位置。
截取字符串
NewStr := SubStr(String, StartPos [, Length])
String是原始字符串,
StartPos是截取的起点,从1开始,如果是0,表示截取最后一个字符;如果是-1,表示截取最后两个字符,以此类推。
length为截取的长度,如果省略此参数,则截取到原始字符串的末尾。
简单来说就是从字符串中间找一个位置,然后往后面截取固定的长度。
MsgBox % SubStr("123abc789", 4, 3) ; 返回 abc
String := "The Quick Brown Fox Jumps Over the Lazy Dog"
MsgBox % SubStr(String, 1, 19) ; 返回 "The Quick Brown Fox"
MsgBox % SubStr(String, -7) ; 返回 "Lazy Dog"
分割
Array := StrSplit(String [, Delimiters, OmitChars])
String是原始字符串,Delimiters是分隔符,支持字符串,OmitChars移除和分隔符相邻的特定字符。
返回的Array是一个数组,可以用Array[1]来访问第一个元素,用Array.Length()可以获取数组中的元素个数。
将路径字符串来分解为名称、目录、扩展名和驱动器
FullFileName = C:\My Documents\Address List.txt
; 只获取上面的单独的文件名:
SplitPath, FullFileName, name
msgbox,% name
; 只获取目录:
SplitPath, FullFileName,, dir
; 获取所有信息:
SplitPath, FullFileName, name, dir, ext, name_no_ext, drive
; 上面这行会对变量进行如下设置:
; name = Address List.txt
; dir = C:\My Documents
; ext = txt
; name_no_ext = Address List
; drive = C: