Carbon字符串 #

一、字符串概述 #

Carbon中的字符串是UTF-8编码的文本序列,使用 String 类型表示。字符串是不可变的,修改字符串会创建新的字符串对象。

二、字符串创建 #

2.1 字符串字面量 #

carbon
var s1: String = "Hello, Carbon!";
var s2: String = "你好,世界!";
var s3: String = "";  // 空字符串

2.2 多行字符串 #

carbon
var multiline: String = R"(
第一行
第二行
第三行
)";

2.3 原始字符串 #

carbon
// 原始字符串不处理转义
var raw: String = R"(C:\Users\Name\file.txt)";
var path: String = R"(\n不是换行符)";

2.4 从其他类型转换 #

carbon
var num: i32 = 42;
var str: String = String(num);  // "42"

var f: f64 = 3.14;
var fstr: String = String(f);   // "3.14"

var b: bool = true;
var bstr: String = String(b);   // "true"

三、转义字符 #

3.1 常用转义 #

转义序列 含义
\n 换行
\r 回车
\t 制表符
\\ 反斜杠
\" 双引号
\' 单引号
\0 空字符
carbon
var s1: String = "第一行\n第二行";
var s2: String = "路径: C:\\Users\\Name";
var s3: String = "他说: \"Hello\"";

3.2 Unicode转义 #

carbon
var heart: String = "\u{2764}";  // ❤
var smile: String = "\u{1F600}"; // 😀

四、字符串操作 #

4.1 拼接 #

carbon
var first: String = "Hello";
var last: String = "World";

// 使用 + 运算符
var full: String = first + ", " + last + "!";  // "Hello, World!"

// 使用 += 运算符
var greeting: String = "Hello";
greeting += " ";
greeting += "Carbon";  // "Hello Carbon"

4.2 重复 #

carbon
var s: String = "Abc";
var repeated: String = s * 3;  // "AbcAbcAbc"

4.3 长度 #

carbon
var s: String = "Hello, 世界!";
var len: i32 = s.Length();     // 字符数: 10
var bytes: i32 = s.ByteLength(); // 字节数: 12

4.4 访问字符 #

carbon
var s: String = "Hello";

// 通过索引访问
var first: String = s[0];   // "H"
var second: String = s[1];  // "e"

// 负索引(从末尾)
var last: String = s[-1];   // "o"

4.5 切片 #

carbon
var s: String = "Hello, World!";

var sub1: String = s[0..5];   // "Hello"
var sub2: String = s[7..12];  // "World"
var sub3: String = s[7..];    // "World!"
var sub4: String = s[..5];    // "Hello"

五、字符串查找 #

5.1 包含检查 #

carbon
var s: String = "Hello, World!";

var has_hello: bool = s.Contains("Hello");  // true
var has_hi: bool = s.Contains("Hi");        // false

5.2 查找位置 #

carbon
var s: String = "Hello, World!";

var pos: i32 = s.Find("World");    // 7
var pos2: i32 = s.Find("xyz");     // -1 (未找到)

var last_pos: i32 = s.FindLast("o");  // 8

5.3 前缀后缀 #

carbon
var s: String = "Hello, World!";

var starts: bool = s.StartsWith("Hello");  // true
var ends: bool = s.EndsWith("World!");     // true

六、字符串修改 #

6.1 替换 #

carbon
var s: String = "Hello, World!";

var new_s: String = s.Replace("World", "Carbon");
// "Hello, Carbon!"

var multi: String = "aaa".Replace("a", "b");
// "bbb"

6.2 大小写转换 #

carbon
var s: String = "Hello, World!";

var upper: String = s.ToUpper();  // "HELLO, WORLD!"
var lower: String = s.ToLower();  // "hello, world!"

6.3 去除空白 #

carbon
var s: String = "  Hello, World!  ";

var trimmed: String = s.Trim();       // "Hello, World!"
var left: String = s.TrimLeft();      // "Hello, World!  "
var right: String = s.TrimRight();    // "  Hello, World!"

6.4 分割与连接 #

carbon
// 分割
var s: String = "a,b,c";
var parts: [String] = s.Split(",");  // ["a", "b", "c"]

// 连接
var words: [String] = ("Hello", "World");
var joined: String = String.Join(" ", words);  // "Hello World"

七、字符串格式化 #

7.1 格式化字符串 #

carbon
var name: String = "Carbon";
var version: i32 = 1;

var s1: String = "语言: {0}, 版本: {1}".Format(name, version);
// "语言: Carbon, 版本: 1"

var s2: String = "你好,{0}!".Format("世界");
// "你好,世界!"

7.2 格式化说明符 #

carbon
var num: i32 = 42;
var f: f64 = 3.14159;

// 宽度和对齐
var s1: String = "{0:10}".Format(num);   // "        42" (右对齐,宽度10)
var s2: String = "{0:<10}".Format(num);  // "42        " (左对齐)
var s3: String = "{0:>10}".Format(num);  // "        42" (右对齐)

// 浮点精度
var s4: String = "{0:.2f}".Format(f);    // "3.14"
var s5: String = "{0:.5f}".Format(f);    // "3.14159"

// 进制
var s6: String = "{0:x}".Format(num);    // "2a" (十六进制)
var s7: String = "{0:b}".Format(num);    // "101010" (二进制)
var s8: String = "{0:o}".Format(num);    // "52" (八进制)

7.3 Print格式化 #

carbon
var name: String = "Carbon";
var count: i32 = 100;

Print("名称: {0}", name);
Print("数量: {0}", count);
Print("名称: {0}, 数量: {1}", name, count);

八、字符串比较 #

8.1 相等比较 #

carbon
var s1: String = "Hello";
var s2: String = "Hello";
var s3: String = "World";

var eq: bool = s1 == s2;   // true
var ne: bool = s1 != s3;   // true

8.2 字典序比较 #

carbon
var s1: String = "Apple";
var s2: String = "Banana";

var lt: bool = s1 < s2;    // true
var gt: bool = s1 > s2;    // false
var le: bool = s1 <= s2;   // true
var ge: bool = s1 >= s2;   // false

8.3 比较方法 #

carbon
var s1: String = "Hello";
var s2: String = "hello";

// 区分大小写比较
var cmp: i32 = s1.Compare(s2);  // < 0 (s1 < s2)

// 不区分大小写比较
var eq: bool = s1.EqualsIgnoreCase(s2);  // true

九、字符串与字符 #

9.1 字符类型 #

carbon
var c: char = 'A';
var emoji: char = '😀';

// 字符操作
var upper: char = c.ToUpper();  // 'A'
var lower: char = c.ToLower();  // 'a'

9.2 字符串转字符数组 #

carbon
var s: String = "Hello";
var chars: [char] = s.Chars();  // ['H', 'e', 'l', 'l', 'o']

// 遍历字符
for (c in s) {
  Print("{0}", c);
}

9.3 字符数组转字符串 #

carbon
var chars: [char] = ('H', 'i');
var s: String = String(chars);  // "Hi"

十、正则表达式 #

10.1 基本匹配 #

carbon
var s: String = "Hello123";

// 匹配数字
var has_digit: bool = s.Match("\\d+");  // true

// 匹配字母
var has_alpha: bool = s.Match("[A-Za-z]+");  // true

10.2 查找匹配 #

carbon
var s: String = "abc123def456";

// 查找所有数字
var matches: [String] = s.FindAll("\\d+");
// ["123", "456"]

10.3 替换 #

carbon
var s: String = "Hello 123 World 456";

// 替换数字
var result: String = s.ReplaceAll("\\d+", "X");
// "Hello X World X"

十一、字符串构建器 #

11.1 使用StringBuilder #

carbon
var sb: StringBuilder = StringBuilder();
sb.Add("Hello");
sb.Add(", ");
sb.Add("World");
sb.Add("!");

var result: String = sb.ToString();  // "Hello, World!"

11.2 高效拼接 #

carbon
// 对于大量拼接,使用StringBuilder更高效
var parts: [String] = ("a", "b", "c", "d", "e");
var sb: StringBuilder = StringBuilder();
for (part in parts) {
  sb.Add(part);
}
var result: String = sb.ToString();

十二、最佳实践 #

12.1 选择合适的字符串类型 #

carbon
// 短字符串:直接使用String
var name: String = "Carbon";

// 大量拼接:使用StringBuilder
var sb: StringBuilder = StringBuilder();
for (i in 0..1000) {
  sb.Add("item");
}

// 常量字符串:使用let
let AppName: String = "MyApp";

12.2 避免不必要的转换 #

carbon
// 不好:多次转换
var s: String = String(num);
Print("{0}", s);

// 好:直接格式化
Print("{0}", num);

12.3 使用原始字符串处理路径 #

carbon
// 不好:需要转义
var path1: String = "C:\\Users\\Name\\file.txt";

// 好:使用原始字符串
var path2: String = R"(C:\Users\Name\file.txt)";

十三、总结 #

本章我们学习了:

  1. 字符串创建:字面量、多行、原始字符串
  2. 转义字符:常用转义、Unicode转义
  3. 字符串操作:拼接、切片、长度
  4. 字符串查找:包含、位置、前后缀
  5. 字符串修改:替换、大小写、去除空白
  6. 字符串格式化:格式化字符串、说明符
  7. 字符串比较:相等、字典序
  8. 正则表达式:匹配、查找、替换

接下来让我们学习Carbon的布尔类型!

最后更新:2026-03-27