一、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的字符串处理从基础操作到正则匹配,覆盖了绝大多数开发需求。关键点在于:
- 基础方法优先解决简单问题。
- 正则表达式用于复杂模式,但需谨慎维护。
- 实际开发中建议结合具体场景选择合适方案。
评论