一、Dart字符串基础操作

在Dart中,字符串处理是最基础也是最重要的技能之一。无论是简单的拼接还是复杂的格式化,Dart都提供了丰富的API来满足需求。

void main() {
  // 1. 字符串定义
  String str1 = 'Hello';
  String str2 = "Dart";
  
  // 2. 字符串拼接
  String combined = str1 + ' ' + str2; // 使用加号
  String interpolated = '$str1 $str2'; // 使用插值表达式
  
  print(combined);       // 输出: Hello Dart
  print(interpolated);   // 输出: Hello Dart
  
  // 3. 多行字符串
  String multiLine = '''
  这是第一行
  这是第二行
  ''';
  print(multiLine);
}

注意事项

  • 单引号和双引号在Dart中没有本质区别,但建议统一风格。
  • 字符串插值比直接拼接更高效,尤其是在复杂表达式中。

二、字符串常用方法

Dart的字符串类提供了许多实用的方法,下面列举几个高频使用的:

void main() {
  String sample = "Dart字符串处理大全";
  
  // 1. 获取长度
  print(sample.length); // 输出: 9
  
  // 2. 转大小写
  print(sample.toUpperCase()); // 输出: DART字符串处理大全
  print(sample.toLowerCase()); // 输出: dart字符串处理大全
  
  // 3. 子字符串
  print(sample.substring(0, 4)); // 输出: Dart
  
  // 4. 替换
  print(sample.replaceAll('处理', '操作')); // 输出: Dart字符串操作大全
  
  // 5. 分割
  print('A,B,C'.split(',')); // 输出: [A, B, C]
}

应用场景

  • 用户输入清洗(如去除空格、统一大小写)。
  • 日志内容的格式化与截取。

三、字符串与正则表达式

正则表达式是处理复杂字符串匹配的利器。Dart通过RegExp类提供支持。

void main() {
  String text = "联系方式:电话123-4567-8901,邮箱example@mail.com";
  
  // 1. 匹配电话号码
  RegExp phoneReg = RegExp(r'\d{3}-\d{4}-\d{4}');
  print(phoneReg.firstMatch(text)?.group(0)); // 输出: 123-4567-8901
  
  // 2. 匹配邮箱
  RegExp emailReg = RegExp(r'[\w\.-]+@[\w\.-]+');
  print(emailReg.allMatches(text).map((m) => m.group(0))); // 输出: (example@mail.com)
  
  // 3. 替换敏感信息
  print(text.replaceAll(phoneReg, '***-****-****')); // 隐藏电话号码
}

技术优缺点

  • 优点:强大的模式匹配能力,适合复杂规则。
  • 缺点:可读性差,调试困难,建议为复杂正则添加详细注释。

四、实战案例:日志解析

结合上述技术,我们实现一个日志解析工具:

void main() {
  String log = '''
  [ERROR] 2023-01-01: 文件读取失败, 路径: /data/config.json
  [INFO] 2023-01-02: 用户登录成功, ID: user123
  ''';
  
  // 提取所有错误日志
  RegExp errorReg = RegExp(r'\[ERROR\].+');
  for (var match in errorReg.allMatches(log)) {
    print(match.group(0));
    // 输出: [ERROR] 2023-01-01: 文件读取失败, 路径: /data/config.json
  }
  
  // 提取用户ID
  RegExp idReg = RegExp(r'ID: (\w+)');
  print(idReg.firstMatch(log)?.group(1)); // 输出: user123
}

总结
Dart的字符串处理从基础操作到正则匹配,覆盖了绝大多数开发需求。关键点在于:

  1. 基础方法优先解决简单问题。
  2. 正则表达式用于复杂模式,但需谨慎维护。
  3. 实际开发中建议结合具体场景选择合适方案。