Skip to Content

文本处理(Text)

字符串的方法面覆盖查找、裁剪、变形、拆合与比较,反复拼接另有 StringBuilder。除注明外方法都是只读的,返回新字符串。

查找与判断

val s = "Hello, Mush"; print(s.Length, s.IsEmpty, " ".IsNullOrWhiteSpace()); print(s.Contains("mus", true), s.StartsWith("Hell"), s.EndsWith("xyz")); print(s.IndexOf("o"), s.IndexOf("o", 5), s.LastIndexOf("o"));
11 False True True True False 4 -1 4

Contains / StartsWith / EndsWith / IndexOf 都带可选的 ignoreCase 参数(大小写不敏感比较)。IndexOf 可给起始下标,未命中返回 -1。

裁剪与变形

val s = "Hello, Mush"; print(s.Substr(7), s.Substr(0, 5), s.Substring(7, 2)); print(s.ToUpper(), s.ToLower()); print(" 甲乙 ".Trim(), "甲乙".PadLeft(5, '.'), "ab".Repeat(3)); print(s.Replace("Mush", "World"));
Mush Hello Mu HELLO, MUSH hello, mush 甲乙 ...甲乙 ababab Hello, World
  • Substr(起, 长度) 长度省略即到末尾,Substring 是别名。
  • Trim / TrimStart / TrimEnd 去空白。
  • PadLeft / PadRight 按簇数补到目标宽度。
  • Repeat(n) 重复,n 非正得空串。

插入、删除与反转

val s = "Hello, Mush"; print(s.Insert(5, "!!"), s.Remove(5)); print("abcdef".Reverse());
Hello!!, Mush Hello fedcba

Remove(起, 长度) 长度省略即删到末尾。Reverse 按簇序反转,多簇字符不会被拆碎。

单簇访问

val s = "Hello, Mush"; print(s.CharAt(7), "é".CodePointAt(0));
M 233
  • CharAt(下标) 取第 index 个字形簇(返回 string),越界报 MS6024)。
  • CodePointAt(下标) 取该簇首标量的码点。
  • Get(下标) 是对应的 fail 形:按同样的字形簇语义取簇,越界 fail IndexOutOfRange。
val s = "héllo"; print(try? s.Get(1) ?? "?"); val t = "你好"; print(try? t.Get(1) ?? "?");
é 好

CharAt / Get 返回的是原串切片,结果可直接继续字符串操作,要单字符值就取索引形。

val family = "a👨‍👩‍👧b"; print(family[1] == '👨‍👩‍👧', family.CharAt(1) == "👨‍👩‍👧");
True True

拆分与拼接

print("a,b,,c".Split(","), "a,b,,c".Split(",", true)); print("1-2-3".Split("-")); print(", ".Join(["甲", "乙"]));
[a, b, , c] [a, b, c] [1, 2, 3] 甲, 乙

Split(分隔符) 返回 string[],默认保留空段,第二参数 true 剔除空段。Join 的接收者是分隔符,参数是序列(数组或列表都收)。

比较与杂项

print("abc".Compare("abd"), "b".Compare("a"));
-1 1

Compare 返回负数、零、正数表达次序,Equals(other, ignoreCase) 做等值判断。字符串的排序比较是序数语义,见运算符。

StringBuilder

循环里大量 + 拼接会产生大量中间字符串。StringBuilder 在内部缓冲区累积拼接,最后一次性 ToString():

import Text.*; val sb = new StringBuilder(); sb.Append("第一段"); sb.AppendLine(""); sb.Append("第二段 "); sb.Append("续"); print(sb.ToString()); print(sb.Length); sb.Clear(); print(sb.Length, sb.ToString() == "");
第一段 第二段 续 9 0 True

Append 返回自身,可以链下去,AppendLine(s) 追加内容加换行(必须带参数)。StringBuilder 在 std 的 Text 模块里,裸名使用需要 import Text.*;。

注意

  • 所有下标与长度都按字形簇计,不是字节或 UTF-16 单元,见 Unicode 与字形簇。
  • 数值的 ToString(format) 格式与插值共用一张表,见字符串插值。
最后更新于 2026年10月10日