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代码单元表示,可以通过codeUnitAt
或codeUnits
成员访问
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代理对组成: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
的新字符串。工厂 -
String.fromCharCodes(Iterable<
int> charCodes, [int start = 0, int? end]) - 分配一个包含指定
charCodes
的新字符串。工厂 - String.fromEnvironment(String name, {String defaultValue = ""})
- 编译配置环境声明中
name
的值。const工厂
属性
方法
-
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 - 将
start
到end
的子字符串替换为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 - 没有尾随空白的字符串。