字符串处理在多数编程语言中都是重头戏,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 中的字符串拼接和遍历操作相关推荐

  1. Go语言中的字符串拼接方法介绍

    本文介绍Go语言中的string类型.strings包和bytes.Buffer类型,介绍几种字符串拼接方法. 目录 string类型 strings包 strings.Builder类型 strin ...

  2. Javascript中的字符串拼接

    字符串拼接是所有程序设计语言都需要的操作.当拼接结果较长时,如何保证效率就成为一个很重要的问题.本文介绍的是Javascript中的字符串拼接,希望对你有帮助,一起来看. const icon = ' ...

  3. oracle数据存储过程 中的循环 for 拼接字符串,oracle存储过程中使用字符串拼接

    1.使用拼接符号"||" v_sql := 'SELECT * FROM UserInfo WHERE ISDELETED = 0 AND ACCOUNT =''' || vAcc ...

  4. Go 语言中的字符串拼接

    目录 1. 通过 + 号连接两个字符串 2. 使用 sprintf 函数 3. 使用 Join 函数 4. 使用 bytes.Buffer 的 WriteString 函数 5. 使用 buffer. ...

  5. shell bash shell 语法中的字符串拼接 合并

    shell中的字符串拼接比较人性化,非常直观. 比如要实现在一个变量中存储 "Hello Jim!", 而且可以更换里面的人名 Jim, Hello 和 ! 直接用双引号括起来: ...

  6. 聊一聊Mysql中的字符串拼接函数

    生死看淡,上来就干! 简单来说,Mysql中的字符串拼接函数主要有三个,分别是CONCAT().CONCAT_WS()以及GROUP_CONCAT():废话不多说,下面就每个函数具体来看一下: 1.C ...

  7. 谈谈JDK8中的字符串拼接

    字符串拼接问题应该是每个Java程序员都熟知的事情了,几乎每个Java程序员都读过关于StringBuffer/StringBuilder来拼接字符串. 在大多数的教程中,也许你会看到用+号拼接字符串 ...

  8. c 语言 字符串 遍历,在C ++中使用字符串的一个遍历的第一个非重复字符

    在本教程中,我们将学习如何在给定的字符串中查找第一个非重复字符.让我们来看一个例子. 输入-nhooo 输出-u 让我们看看解决问题的步骤.初始化字符串. 初始化映射字符和数组,以存储字符串中字符的频 ...

  9. golang中的字符串拼接

    go语言中支持的字符串拼接的方法有很多种,这里就来罗列一下 常用的字符串拼接方法 1.最常用的方法肯定是 + 连接两个字符串.这与python类似,不过由于golang中的字符串是不可变的类型,因此用 ...

最新文章

  1. c++自带的可持久化平衡树?rope大法好!(超详细解答 + 5道例题讲解,可直接替代可持久化的线段树、并查集、平衡树!)
  2. Linux学习之路-Linux-yum命令【8】---20171217
  3. Android 短信模块分析(四) MMS之短信的发送与接收
  4. 给新手的 11 个 Docker 免费上手项目
  5. 软件工程方法学要素含义_日期时间数据的要素工程
  6. 第一学期《计算机网络》作业一_新学期学习计划合集5篇-其他范文
  7. python棋类程序_python棋类游戏编写入门
  8. 前端性能优化的几种方案
  9. 关于小米8玩王者荣耀加载缓慢的情况
  10. 设计一个雇员Employee类
  11. 图书管理系统(查找图书和输出全部图书)
  12. imperva代理拦截
  13. 什么是数字证书、公钥私钥
  14. 数据分析——用户流失分析
  15. ubuntu换阿里源
  16. 空间计量经济学学习笔记(一)
  17. moxa串口服务器网页访问失败,moxa串口服务器连接设置
  18. 软件及互联网高端灵活用工与技术服务提供商
  19. 灵光乍现 解决移动端保持键盘打开状态
  20. 详细的微信小程序讲解

热门文章

  1. jq双击放大图片_痘痘肌肤反馈图片,平时注意这3个就可以
  2. ubuntu server设置时区和更新时间
  3. 几个提升Go业务开发效率的流行框架和开源库
  4. rocketMq双master集群模式下故障演练
  5. Python面试真题第二节
  6. linux Vue+nginx+django 实现前后端分离
  7. Qlik 助力安井食品实现企业智能决策、高效运营
  8. NG2入门 - 架构
  9. 数据库订单表状态字段值设计的一些思考
  10. IOS的UIPickerView 和UIDatePicker