手册目录

文本

导入 std.text 使用字符串扩展、格式化、Unicode 视图和正则表达式:

import std.text;

字符串操作

let text = "  Feng Language  ";
let trimmed = text.trim();
let lower = trimmed.toLowerCase();
let upper = trimmed.toUpperCase();
let found = trimmed.contains("Language");
let index = trimmed.indexOf("Lang");
let parts = trimmed.split(" ");

常用方法还包括 startsWithendsWithreplacerepeatpadStartpadEndclonetoBytes

string.length() 返回 UTF-8 字节数,at(index)getByte(index) 也按字节位置工作。不要用它们统计用户可见字符。

拼接与格式化

let joined = string.join(", ", ["Feng", "C", "LLVM"]);
let message = string.format("{0}: {1}", "score", "100");

占位符使用零基下标 {0}{1}。非法或越界占位符按原文本保留。

满足 Display 的同类参数也可直接格式化:

import std.numeric;

let message = string.format<int>("{0} + {1} = {2}", 20, 22, 42);

Unicode 视图

字符串内部使用 UTF-8。需要按 Unicode 码点遍历时使用 rune 视图,需要按用户可见字素簇遍历时使用 grapheme 视图。两者避免把多字节字符误当成多个文本字符。

正则表达式

let pattern = RegExp("[0-9]+");
defer {
  pattern.destroy();
}

let matched = pattern.test("Feng 42");
let matches = pattern.findAll("1, 2, 3");
let replaced = pattern.replaceAll("v1 v2", "version");

可用 RegExpFlag 配置大小写、多行、dot-all 等行为。RegExp 持有原生资源,使用完应调用 destroy(),并优先用 defer 保证清理。

字符串还提供 matchesreplacePatternsplitPattern 等快捷方法。