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

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

对于基本多语言平面(平面0)之外的字符,该字符由代理对组成,runes将代理对组合并返回一个整数。例如,Unicode字符音乐G-clef ('𝄞'),其rune值为0x1D11E,由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类不能扩展或实现。尝试这样做会产生编译时错误。

其他资源

实现类型
可用的扩展

构造函数

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

属性

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

方法

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
返回此字符串中pattern的第一个匹配项的位置,从start开始,包含在内。
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(Pattern from, String to, [int startIndex = 0]) String
创建一个新字符串,将 from 的第一次出现替换为 to
replaceFirstMapped(Pattern from, String replace(Match match), [int startIndex = 0]) String
替换此字符串中 from 的第一次出现。
replaceRange(int start, int? end, String replacement) String
startend 的子字符串替换为 replacement
split(Pattern pattern) List<String>
pattern 的匹配项处分割字符串,并返回一个子字符串列表。
splitMapJoin(Pattern pattern, {String onMatch(Match)?, String onNonMatch(String)?}) String
分割字符串,转换其部分,并将它们组合成一个新的字符串。
startsWith(Pattern pattern, [int index = 0]) bool
判断此字符串是否以 pattern 匹配开始。
substring(int start, [int? end]) String
start(包含)到 end(不包含)的字符串子串。
toLowerCase() String
将此字符串中的所有字符转换为小写。
toString() String
此对象的字符串表示形式。
继承
toUpperCase() String
将此字符串中的所有字符转换为大写。
trim() String
没有前导和尾随空白的字符串。
trimLeft() String
没有前导空白的字符串。
trimRight() String
没有尾随空白的字符串。

运算符

operator *(int times) String
通过将此字符串自身连接多次来创建一个新的字符串。
operator+(String other) String
通过将此字符串与 other 连接来创建一个新的字符串。
操作符 ==(Object other) bool
判断 other 是否为具有相同代码单元序列的 String
覆盖
操作符 [](int index) String
给定 index 的位置上的字符(作为一个单独的代码单元的 String)。