当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Dart String用法及代码示例


dart:core 库中String 类的用法介绍如下。

一系列 UTF-16 代码单元。

字符串主要用于表示文本。一个字符可以由多个代码点表示,每个代码点由一个或两个代码单元组成。例如,巴布亚新几内亚国旗字符需要四个代码单元来表示两个代码点,但应将其视为单个字符:"🇵🇬"。不支持标志字符的平台可能会显示字母"PG"。如果代码点被交换,它将变成瓜德罗普岛标志"🇬🇵" ("GP")。

字符串可以是单行或多行。单行字符串使用匹配的单引号或双引号编写,多行字符串使用三引号编写。以下都是有效的 Dart 字符串:

'Single quotes';
"Double quotes";
'Double quotes in "single" quotes';
"Single quotes in 'double' quotes";

'''A
multiline
string''';

"""
Another
multiline
string""";

字符串是不可变的。虽然您不能更改字符串,但您可以对创建新字符串的字符串执行操作:

const string = 'Dart is fun';
print(string.substring(0, 4)); // 'Dart'

您可以使用加号 (+) 运算符来连接字符串:

const string = 'Dart ' + 'is ' + 'fun!';
print(string); // 'Dart is fun!'

相邻的字符串文字会自动连接:

const string = 'Dart ' 'is ' 'fun!';
print(string); // 'Dart is fun!'

您可以使用 ${} 在字符串中插入 Dart 表达式的值。评估标识符时可以省略花括号:

const string = 'dartlang';
print('$string has ${string.length} letters'); // dartlang has 8 letters

字符串由一系列 Unicode UTF-16 代码单元表示,可通过 codeUnitAtcodeUnits 成员访问:

const string = 'Dart';
final firstCodeUnit = string.codeUnitAt(0);
print(firstCodeUnit); // 68, aka U+0044, the code point for 'D'.
final allCodeUnits = string.codeUnits;
print(allCodeUnits); // [68, 97, 114, 116]

可以通过索引运算符访问各个代码单元的字符串表示形式:

const string = 'Dart';
final charAtIndex = string[0];
print(charAtIndex); // 'D'

字符串的字符以 UTF-16 编码。解码结合了代理对的 UTF-16 会产生 Unicode 代码点。遵循与 Go 类似的术语,Dart 使用名称 'rune' 来表示表示 Unicode 代码点的整数。使用 runes 属性获取字符串的符文:

const string = 'Dart';
final runes = string.runes.toList();
print(runes); // [68, 97, 114, 116]

对于由代理对组成的基本多语言平面(平面 0)之外的字符,runes 组合该代理对并返回一个整数。例如,符文值为 0x1D11E 的音乐剧 G-clef ('𝄞') 的 Unicode 字符由 UTF-16 代理对组成:0xD8340xDD1E。使用 codeUnits 返回代理对,使用 runes 返回它们的组合值:

const clef = '\u{1D11E}';
for (final item in clef.codeUnits) {
  print(item.toRadixString(16));
  // d834
  // dd1e
}
for (final item in clef.runes) {
  print(item.toRadixString(16)); // 1d11e
}

String 类无法扩展或实现。尝试这样做会产生编译时错误。

其他资源

实现的类型

Comparable<String> Pattern

相关用法


注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 String class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。