跳到主要内容

文本

连接时两侧都必须是 Text​

+ 连接两个 Text。"Count: " + 5 不是 "Count: 5",而是混合类型的回退结果 Integer 0。请先用 StringFormat 将数字、Bool 和句柄转换为 Text。

StringFormat(format, value0, value1)​

  • 将每个 {0} 替换为 value0,将每个 {1} 替换为 value1。两个值都可以是任何类型。没有 {2},也没有 {0:N2} 这样的格式说明符。
  • 它始终需要三个参数。不使用的值请传入 "":StringFormat("{0} items", n, "")。
  • 要格式化两个以上的值,请嵌套调用或连接各次的结果(参见下面的示例)。
  • Real 始终显示六位小数(0.500000)。要得到整数,请先将其舍入为 Integer;要得到定点输出,请先缩放(MathRound(r * 100))。
  • {0} 先于 {1} 被替换,因此如果 value0 的文本本身包含 {1},它也会被替换。
w = WindowGetActive();
s = StringFormat(StringFormat("{0} x {1} at ", WindowGetWidth(w), WindowGetHeight(w)) + "({0}, {1})",
WindowGetX(w), WindowGetY(w));
UtilityPrint(s); // 例如 1280 x 720 at (100, 80)

测量、搜索和截取​

  • StringGetLength 计算的是 UTF-16 代码单元数,而不是字符数。基本多文种平面之外的表情符号算作 2 个。
  • StringGetIndexOf(text, search) 返回从 0 开始的索引;找不到 search 时返回 -1。它区分大小写,并且没有“最后一次出现的位置”函数(用循环扫描)。
  • StringGetSubstring(text, start, length):start 从 0 开始。超出末尾的 length 会被截短,位于末尾或超出末尾的 start 会得到 ""。负数的 start 或 length 是错误,会使操作停止。
  • 没有索引语法(s[0])。要取一个字符,请使用 StringGetSubstring(s, i, 1)。
  • StringContains、StringStartsWith、StringEndsWith 和 StringReplace 都是精确匹配且区分大小写的。要进行不区分大小写的测试,请先将两侧都转换为小写。
  • StringToUpper/StringToLower 遵循用户区域设置的大小写规则,因此能正确处理土耳其语中带点和不带点的 i。
  • StringTrim 会去除两端的空白,包括 Windows \r\n 行结束符留下的 \r。
  • 如果搜索文本或分隔符为空,StringReplace 和 StringSplit 会使操作停止。

拆分结果是按索引读取的缓存​

一个值无法保存列表,因此 StringSplit(text, delimiter) 会将各部分存储在正在运行的脚本的上下文中,并返回部分的数量。用 StringGetSplitPartAt(i) 读取每个部分;索引超出范围时得到 ""。同一脚本中的下一次 StringSplit 会替换该缓存,因此在拆分其他内容之前,请先将需要的部分复制到变量中。每个 …EnumerateAll、…FindAll… 或 …GetAll… 内置函数与其对应的 …EnumeratedAt 读取函数配合使用时,工作方式都相同。

比较文本​

== 是精确比较且区分大小写。</> 按 UTF-16 代码单元进行序数比较,这不是字典顺序:所有大写 ASCII 字母都排在所有小写字母之前,带重音的字母排在 z 之后。不要将这种顺序作为字母顺序呈现给用户。