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

字符串由通过codeUnitAtcodeUnits成员可访问的Unicode UTF-16代码单元序列表示。

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属性获取字符串的rune。

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

对于由代理对组成且位于基本多语言平面(第0平面)之外的字符,runes将组合代理对并返回单个整数。例如,音乐G-clef('𝄞')的Unicode字符,rune值为0x1D11E,由一个UTF-16代理对组成:`0xD834`和`0xDD1E`。使用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类。尝试这样做会产生编译时错误。

其他资源

实现类型
可用的扩展

构造函数

String.fromCharCode(int charCode)
分配包含指定charCode的新字符串。
factory
String.fromCharCodes(Iterable<int> charCodes, [int start = 0, int? end])
分配包含指定 charCodes 的新字符串。
factory
String.fromEnvironment(String name, {String defaultValue = ""})
编译配置环境声明中 name 的值。
const
factory

属性

codeUnits List<int>
此字符串的 UTF-16 代码单元的非可变列表。
无设置器
hashCode int
从字符串的代码单元派生的哈希码。
无设置器覆盖
isEmpty bool
此字符串是否为空。
无设置器
isNotEmpty bool
此字符串是否不为空。
无设置器
length int
字符串的长度。
无设置器
runes Runes
此字符串的 Unicode 代码点的 可迭代对象
无设置器
runtimeType Type
对象的运行时类型的表示。
无设置器继承

方法

allMatches(String string, [int start = 0]) Iterable<Match>
重复地将此模式与字符串匹配。
继承
codeUnitAt(int index) int
返回给定 index 的 16 位 UTF-16 代码单元。
compareTo(String other) int
比较此字符串与 other
覆盖
contains(Pattern other, [int startIndex = 0]) bool
此字符串是否包含 other 的匹配。
endsWith(String other) bool
此字符串是否以other结尾。
indexOf(Pattern pattern, [int start = 0]) int
返回在当前位置start及之前字符串中第一次匹配pattern的位置。
lastIndexOf(Pattern pattern, [int? start]) int
此字符串中最后一个匹配pattern的起始位置。
matchAsPrefix(String string, [int start = 0]) Match?
将此模式与string的开始进行比较。
继承
noSuchMethod(Invocation invocation) → dynamic
当访问不存在的方法或属性时被调用。
继承
padLeft(int width, [String padding = ' ']) String
如果此字符串的长度小于width,则在左侧填充此字符串。
padRight(int width, [String padding = ' ']) String
如果此字符串的长度小于width,则在右侧填充此字符串。
replaceAll(Pattern from, String replace) String
将所有匹配到from的子字符串替换为replace
replaceAllMapped(Pattern from, String replace(Match match)) String
用计算出的字符串替换所有匹配from的子字符串。
replaceFirst(模式 from, 字符串 to, [整数 startIndex = 0]) 字符串
创建一个新的字符串,将第一次出现的 from 替换为 to
replaceFirstMapped(模式 from, 字符串 replace(匹配 match), [整数 startIndex = 0]) 字符串
替换此字符串中第一次出现的 from
replaceRange(整数 start, 整数? end, 字符串 replacement) 字符串
使用 replacement 替换从 startend 的子字符串。
split(模式 pattern) 列表<字符串>
pattern 匹配处分割字符串并返回一个子字符串列表。
splitMapJoin(模式 pattern, {字符串 onMatch(匹配)?, 字符串 onNonMatch(字符串)?}) 字符串
分割字符串,转换其部分,并将它们组合成一个新的字符串。
startsWith(模式 pattern, [整数 index = 0]) 布尔值
该字符串是否以 pattern 匹配开始。
substring(整数 start, [整数? end]) 字符串
从起始索引start(包含)到结束索引end(不包含)的字符串子串。
toLowerCase() String
将此字符串中的所有字符转换为小写。
toString() String
该对象的字符串表示。
继承
toUpperCase() String
将此字符串中的所有字符转换为大写。
trim() String
没有前导和尾部空白的字符串。
trimLeft() String
没有前导空白的字符串。
trimRight() String
没有尾部空白的字符串。

操作符

operator * (int times) String
通过将此字符串与自身拼接多次来创建一个新字符串。
operator +(String other) String
通过将此字符串与other拼接来创建一个新字符串。
operator ==(Object other) bool
判断other是否为与当前字符串序列相同的String
覆盖
operator [](int index) String
给定索引index处的字符(作为单个代码单元的String)。