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
字符串由通过codeUnitAt
或codeUnits
成员可访问的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
类。尝试这样做会产生编译时错误。
其他资源
- StringBuffer以高效地逐步构建字符串。
- RegExp用于处理正则表达式。
- 字符串和正则表达式
- 实现类型
- 可用的扩展
构造函数
- 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
的值。constfactory
属性
方法
-
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
替换从start
到end
的子字符串。 -
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)。