AHK 中的字符串拼接和遍历操作
字符串处理在多数编程语言中都是重头戏,AHK 自然也不例外。AHK 在字符串处理方面还是很灵活的,如果掌握好了,写起代码来会事半功倍。本文先介绍最常用的操作:拼接和遍历。
字符串拼接
拼接恐怕是最常用的操作了,在 AHK 中也非常简单,直接将两个字符串用空格隔开就可以了。
a := "abc"
b := 100
c := "def"
d := 123.456
e := 200; f 的值是字符串 abc100anddef123.456
f := a b "and" c d
; g 的值是字符串 100200
g := b e
不管是字符串、整数还是浮点数,都可以用空格拼接成一个字符串。更神奇的是,空格可以和其他算术运算符一起使用。
a := 100
b := 200; c 的值是 100150
c := a b - 50
其实 AHK 中整数 100200 和 字符串 "100200" 是没有区别的,当整数用的时候就是 100200,当字符串用的时候就是 "100200",当然内部实现上会有一些优化。如果感觉无法接受的话,也可以认为整数和字符串是有区别的,在实际使用中会自动相互转换。
实际上,AHK 中 .(点运算符)是专门用来拼接字符串的,在某些情况还是不能省略的。
a := 300
b := 200; c 的值是 100
c := a - b; d 的值是 300-200
d := a . - b
正因为空格可以和其他算术运算符一起使用,使用起来可以很灵活,为了避免歧义,空格只有在必要的情况(即这个表达式没有其他的解释办法时)才起拼接作用。
子字符串遍历
还有一个非常常见的操作,是遍历一个字符串的子字符串。Loop, Parse 是专门用来做这个的。
Loop, Parse, InputVar [, Delimiters, OmitChars]
其中 InputVar 是变量名,不需要加 %。Delimiters 是分隔符,OmitChars 是要忽略的字符。
最简单的场景就是遍历字符串中的每一个字符。
text := "abcd"Loop, Parse, text
{; 依次弹出; a; b; c; dMsgBox, %A_LoopField%
}
Delimiters 和 OmitChars 都省略的情况,就是遍历字符串中的每一个字符。
另外一个典型场景是依次处理一段文字的每一行。
text =
(
line1
line2
line3
)Loop, Parse, text, `n, `r
{; 依次弹出; line1; line2; line3MsgBox, %A_LoopField%
}
这里 Delimiters 是 `n。`r 又是什么呢?在类 UNIX 操作系统中,文本中的换行符就是 `n,但在 Windows 中,换行符是 `r`n。如果处理一段换行符是 `r`n 的文本,直接用 `n 分隔,会保留多余的 `r,所以设置 OmitChars 为 `r 可以将其去掉。可能有不仔细的朋友认为 Loop, Parse, text, \
n, `r 是将字符串同时按 \
n 和 `r 来分隔,这是错误的,`n 和 `r 的顺序也不能颠倒。
除了按换行符,我们也经常需要按其他符号分隔字符串,比如按空格,按逗号等,就大同小异了。但需要注意空格和逗号有点特殊,因为它们是特殊符号,写法有一些特别。
text := "a b,c d:xxx"Loop, Parse, text, %A_Space%
{; 依次弹出; a; b,c; d:xxxMsgBox, %A_LoopField%
}Loop, Parse, text, `,
{; 依次弹出; a b; c d:xxxMsgBox, %A_LoopField%
}Loop, Parse, text, :
{; 依次弹出; a b,c d; xxxMsgBox, %A_LoopField%
}
这里空格用的是 %A_Space%,A_Space 是一个 AHK 的内部变量,这样需要用 % 取该变量的值。`, 是用转义的方法取到的逗号字符,因为直接写逗号会被认为是参数的分隔符。类似的还有 `t 或者 %A_Tab% 是 Tab 等等,如果一个字符直接写会报语法错误,那么通常在前边加个 ` 就可以了。以后我也会专门写文章介绍转义字符。至于冒号,就没有什么特别,直接写就可以了。
有些情况我们需要按字符串分隔,而不是按字符分隔,比如:
text := "abc()bcd(cde"
需要按 () 分隔 text。需要注意,这种情况这样的写法就是错误的了:
text := "abc()bcd(cde"Loop, Parse, text, (, )
{; 依次弹出; abc; bcd; cdeMsgBox, %A_LoopField%
}
一个可行的办法,是先将字符串中的 () 替换成一个字符串里没有的特殊字符,比如 @,然后再用这个特殊字符作为分隔符:
text := "abc()bcd(cde"; StrReplace 函数是用来替换字符串的,我们以后再详细了解
text := StrReplace(text, "()", "@")Loop, Parse, text, @
{; 依次弹出; abc; bcd(cdeMsgBox, %A_LoopField%
}
更多内容
除了拼接和遍历字符串,我们还需要进行查找、替换、匹配、分隔、计算长度等操作,这涉及数量较多的字符串处理函数,以后我们再详细了解。
付费解决 Windows、Linux、Shell、C、C++、AHK、Python、JavaScript、Lua 等领域相关问题,灵活定价,欢迎咨询,微信 ly50247。
AHK 中的字符串拼接和遍历操作相关推荐
- Go语言中的字符串拼接方法介绍
本文介绍Go语言中的string类型.strings包和bytes.Buffer类型,介绍几种字符串拼接方法. 目录 string类型 strings包 strings.Builder类型 strin ...
- Javascript中的字符串拼接
字符串拼接是所有程序设计语言都需要的操作.当拼接结果较长时,如何保证效率就成为一个很重要的问题.本文介绍的是Javascript中的字符串拼接,希望对你有帮助,一起来看. const icon = ' ...
- oracle数据存储过程 中的循环 for 拼接字符串,oracle存储过程中使用字符串拼接
1.使用拼接符号"||" v_sql := 'SELECT * FROM UserInfo WHERE ISDELETED = 0 AND ACCOUNT =''' || vAcc ...
- Go 语言中的字符串拼接
目录 1. 通过 + 号连接两个字符串 2. 使用 sprintf 函数 3. 使用 Join 函数 4. 使用 bytes.Buffer 的 WriteString 函数 5. 使用 buffer. ...
- shell bash shell 语法中的字符串拼接 合并
shell中的字符串拼接比较人性化,非常直观. 比如要实现在一个变量中存储 "Hello Jim!", 而且可以更换里面的人名 Jim, Hello 和 ! 直接用双引号括起来: ...
- 聊一聊Mysql中的字符串拼接函数
生死看淡,上来就干! 简单来说,Mysql中的字符串拼接函数主要有三个,分别是CONCAT().CONCAT_WS()以及GROUP_CONCAT():废话不多说,下面就每个函数具体来看一下: 1.C ...
- 谈谈JDK8中的字符串拼接
字符串拼接问题应该是每个Java程序员都熟知的事情了,几乎每个Java程序员都读过关于StringBuffer/StringBuilder来拼接字符串. 在大多数的教程中,也许你会看到用+号拼接字符串 ...
- c 语言 字符串 遍历,在C ++中使用字符串的一个遍历的第一个非重复字符
在本教程中,我们将学习如何在给定的字符串中查找第一个非重复字符.让我们来看一个例子. 输入-nhooo 输出-u 让我们看看解决问题的步骤.初始化字符串. 初始化映射字符和数组,以存储字符串中字符的频 ...
- golang中的字符串拼接
go语言中支持的字符串拼接的方法有很多种,这里就来罗列一下 常用的字符串拼接方法 1.最常用的方法肯定是 + 连接两个字符串.这与python类似,不过由于golang中的字符串是不可变的类型,因此用 ...
最新文章
- c++自带的可持久化平衡树?rope大法好!(超详细解答 + 5道例题讲解,可直接替代可持久化的线段树、并查集、平衡树!)
- Linux学习之路-Linux-yum命令【8】---20171217
- Android 短信模块分析(四) MMS之短信的发送与接收
- 给新手的 11 个 Docker 免费上手项目
- 软件工程方法学要素含义_日期时间数据的要素工程
- 第一学期《计算机网络》作业一_新学期学习计划合集5篇-其他范文
- python棋类程序_python棋类游戏编写入门
- 前端性能优化的几种方案
- 关于小米8玩王者荣耀加载缓慢的情况
- 设计一个雇员Employee类
- 图书管理系统(查找图书和输出全部图书)
- imperva代理拦截
- 什么是数字证书、公钥私钥
- 数据分析——用户流失分析
- ubuntu换阿里源
- 空间计量经济学学习笔记(一)
- moxa串口服务器网页访问失败,moxa串口服务器连接设置
- 软件及互联网高端灵活用工与技术服务提供商
- 灵光乍现 解决移动端保持键盘打开状态
- 详细的微信小程序讲解