美文网首页
字符串拼接

字符串拼接

作者: 河许人 | 来源:发表于2019-03-20 23:46 被阅读0次

字符串处理在多数编程语言中都是重头戏,AHK 自然也不例外。AHK 在字符串处理方面还是很灵活的,如果掌握好了,写起代码来会事半功倍。本文先介绍最常用的操作:拼接和遍历。

<h2>字符串拼接</h2>

拼接恐怕是最常用的操作了,在 AHK 中也非常简单,直接将两个字符串用空格隔开就可以了。

<pre class="lang:autoit decode:true ">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</pre>

不管是字符串、整数还是浮点数,都可以用空格拼接成一个字符串。更神奇的是,空格可以和其他算术运算符一起使用。

<pre class="lang:autoit decode:true ">a := 100

b := 200

; c 的值是 100150

c := a b - 50</pre>

其实 AHK 中整数 100200 和 字符串 "100200" 是没有区别的,当整数用的时候就是 100200,当字符串用的时候就是

"100200",当然内部实现上会有一些优化。如果感觉无法接受的话,也可以认为整数和字符串是有区别的,在实际使用中会自动相互转换。

实际上,AHK 中 .(点运算符)是专门用来拼接字符串的,在某些情况还是不能省略的。

<pre class="lang:autoit decode:true ">a := 300

b := 200

; c 的值是 100

c := a - b

; d 的值是 300-200

d := a . - b</pre>

正因为空格可以和其他算术运算符一起使用,使用起来可以很灵活,为了避免歧义,空格只有在必要的情况(即这个表达式没有其他的解释办法时)才起拼接作用。

<h2>子字符串遍历</h2>

还有一个非常常见的操作,是遍历一个字符串的子字符串。Loop, Parse 是专门用来做这个的。

<pre class="lang:autoit decode:true ">Loop, Parse, InputVar [, Delimiters, OmitChars]</pre>

其中 InputVar 是变量名,不需要加 %。Delimiters 是分隔符,OmitChars 是要忽略的字符。

最简单的场景就是遍历字符串中的每一个字符。

<pre class="lang:autoit decode:true ">text := "abcd"

Loop, Parse, text

{

    ; 依次弹出

    ; a

    ; b

    ; c

    ; d

    MsgBox, %A_LoopField%

}</pre>

Delimiters 和 OmitChars 都省略的情况,就是遍历字符串中的每一个字符。

另外一个典型场景是依次处理一段文字的每一行。

<pre class="lang:autoit decode:true ">text =

(

line1

line2

line3

)

Loop, Parse, text, `n, `r

{

    ; 依次弹出

    ; line1

    ; line2

    ; line3

    MsgBox, %A_LoopField%

}</pre>

这里 Delimiters 是 `n。`r 又是什么呢?在类 UNIX 操作系统中,文本中的换行符就是 `n,但在 Windows

中,换行符是 `r`n。如果处理一段换行符是 `r`n 的文本,直接用 `n 分隔,会保留多余的 `r,所以设置 OmitChars 为 `r

可以将其去掉。可能有不仔细的朋友认为 Loop, Parse, text, `n, `r 是将字符串同时按 `n 和 `r 来分隔,这是错误的,`n 和 `r 的顺序也不能颠倒。

除了按换行符,我们也经常需要按其他符号分隔字符串,比如按空格,按逗号等,就大同小异了。但需要注意空格和逗号有点特殊,因为它们是特殊符号,写法有一些特别。

<pre class="lang:autoit decode:true ">text := "a b,c d:xxx"

Loop, Parse, text, %A_Space%

{

    ; 依次弹出

    ; a

    ; b,c

    ; d:xxx

    MsgBox, %A_LoopField%

}

Loop, Parse, text, `,

{

    ; 依次弹出

    ; a b

    ; c d:xxx

    MsgBox, %A_LoopField%

}

Loop, Parse, text, :

{

    ; 依次弹出

    ; a b,c d

    ; xxx

    MsgBox, %A_LoopField%

}</pre>

这里空格用的是 %A_Space%,A_Space 是一个 AHK 的内部变量,这样需要用 % 取该变量的值。`,

是用转义的方法取到的逗号字符,因为直接写逗号会被认为是参数的分隔符。类似的还有 `t 或者 %A_Tab% 是 Tab

等等,如果一个字符直接写会报语法错误,那么通常在前边加个 `

就可以了。以后我也会专门写文章介绍转义字符。至于冒号,就没有什么特别,直接写就可以了。

有些情况我们需要按字符串分隔,而不是按字符分隔,比如:

<pre class="lang:autoit decode:true ">text := "abc()bcd(cde"</pre>

需要按 () 分隔 text。需要注意,这种情况这样的写法就是错误的了:

<pre class="lang:autoit decode:true ">text := "abc()bcd(cde"

Loop, Parse, text, (, )

{

    ; 依次弹出

    ; abc

    ; bcd

    ; cde

    MsgBox, %A_LoopField%

}</pre>

一个可行的办法,是先将字符串中的 () 替换成一个字符串里没有的特殊字符,比如 @,然后再用这个特殊字符作为分隔符:

<pre class="lang:autoit decode:true ">text := "abc()bcd(cde"

; StrReplace 函数是用来替换字符串的,我们以后再详细了解

text := StrReplace(text, "()", "@")

Loop, Parse, text, @

{

    ; 依次弹出

    ; abc

    ; bcd(cde

    MsgBox, %A_LoopField%

}</pre>

<h2>更多内容</h2>

除了拼接和遍历字符串,我们还需要进行查找、替换、匹配、分隔、计算长度等操作,这涉及数量较多的字符串处理函数,以后我们再详细了解。

相关文章

  • R 包学习 - stringr()

    stringr: R 语言字符串处理包 字符串拼接函数str_c: 字符串拼接。str_join: 字符串拼接,同...

  • Swift5.0 字符串(String)详解

    1.字符串拼接 + 拼接 \() 拼接 2.字符串是否为空判断 3.字符串长度 4.字符串比较 == > < 5....

  • 字符串

    遍历 拼接 字符串拼接格式化 字符串的截取

  • Python 字符串详解

    字符串替换 字符串拼接 1.两个字符串拼接 2.打印拼接 字符串按照字符切割 字符串比较 字符串长度 字符串是否包...

  • 字符串api

    字符串 增 concat() //拼接任意字符串,并返回拼接后的字符串 加号 ➕ 同上 字符串 ...

  • 批量根据id修改字段

    update tableName set 字段名 = concat(id,'拼接字符串','拼接字符串');

  • 142字符串的高效处理

    1、字符串的拼接 2、StringBuilder类(字符串构建器) 使用StringBuilder来拼接字符串: ...

  • go语言string之Buffer与Builder

    操作字符串离不开字符串的拼接,但是Go中string是只读类型,大量字符串的拼接会造成性能问题。 字符串拼接的方式...

  • 字符串操作

    字符串操作 拼接 截取 长度 相等 包含 替换 去除开头末尾字符串 字符串分割 字符串拼接

  • ES6之字符串的扩展(上)

    模板字符串 在传统的拼接字符串中,使用的是‘+’进行拼接: 可以看出用+进行拼接字符串比较繁琐,尤其是当字符串特别...

网友评论

      本文标题:字符串拼接

      本文链接:https://www.haomeiwen.com/subject/iztfvqtx.html