Dart / Flutter字符串方法和运算符教程(含示例) DartString是UTF-16(16位Unicode转换格式)代码单元的序列。它使Dart更增强大,能够用任何语言构建咱们的移动和Web应用程序。在本教程中,咱们将介绍许多有用的Dart字符串方法和运算符。你会知道:git
String s1 = 'bezkoder.com - Mobile code examples';
String s2 = "bezkoder.com - Mobile App Development tutorials";
String s3 = 'It\'s not easy to become a developer, but worthy!';
String s4 = "It's not easy to become a developer, but worthy!";
// It's not easy to become a developer, but worthy!
复制代码
String raws1 = r'bezkoder.com\nMobile App Development tutorials';
print(raws1);
// bezkoder.com\nMobile App Development tutorials
String raws2 = r"It\'s not easy to become a developer, but worthy!";
print(raws2);
// It\'s not easy to become a developer, but worthy!
复制代码
建立多行字符串 咱们将使用三引号建立多行字符串:markdown
String s1 = '''bezkoder.com Mobile Code examples''';
print(s1);
/* bezkoder.com Mobile Code examples */
String s2 = """bezkoder.com App Development tutorials""";
print(s2);
/* bezkoder.com App Development tutorials */
复制代码
咱们知道Dart字符串是UTF-16代码单元的序列。所以,要使用UTF-32单位建立字符串,咱们须要使用特定的语法:app
\uXXXX表示4位十六进制值函数
表示(\u{XX}或\u{XXXXX}大括号中的十六进制值)少于或超过4位数字。oop
String u1 = 'Unicode emoticon characters: \u{1f603} \u{1f604} \u{1f605} \u{1f606} \u{1f607}';
print(u1);
// Unicode 5-digit: ? ? ? ? ?
String u2 = 'Miscellaneous symbols: \u{266A} \u{266B} \u{266C} \u{266D} \u{266E} \u{266F}';
print(u2);
// Miscellaneous symbols: ♪ ♫ ♬ ♭ ♮ ♯
String u3 = 'Greek characters: \u{3B1} \u{3B2} \u{3B3} \u{3B4} \u{3B5}';
print(u3);
// Greek characters: α β γ δ ε
复制代码
String str = 'bezkoder.com - Mobile code examples';
str[0]; // b
str[2]; // z
复制代码
String str = 'bezkoder.com';
str.substring(0,8); // bezkoder
str.substring(2,8); // zkoder
str.substring(3); // koder.com
复制代码
这是substring()
返回a 的方法的签名String
:学习
String substring(int startIndex, [int endIndex]);
复制代码
startIndex
:开始的字符索引。起始索引为0。ui
endIndex(可选
):结束字符+的索引1。若是未设置,则结果将是从startIndex
字符串开始到结尾的子字符串。spa
例如,咱们但愿'r'是结尾。在“ bezkoder.com”中,“ r”的索引为7。所以,咱们须要设置endIndex的8。code
咱们能够使用如下indexOf()
方法来作到这一点:orm
String s = 'bezkoder.com';
s.indexOf('e'); // 1
s.indexOf('er'); // 6
s.indexOf(RegExp(r'e.')); // 1
s.indexOf('code'); // -1
复制代码
indexOf()-1
若是没有匹配项,将返回。
咱们能够使用如下lastIndexOf()
方法来作到这一点:
String s = 'bezkoder.com';
s.lastIndexOf('e'); // 6
s.lastIndexOf(RegExp(r'e.')); // 6
s.lastIndexOf('code'); // -1
复制代码
lastIndexOf()-1
若是没有匹配项,将返回。
toUpperCase()
而且toLowerCase()
方法返回一个新字符串(不更改原始字符串),而且全部字母均已转换为大写或小写格式:
String str = 'bezkoder';
String upperStr = str.toUpperCase();
print(upperStr); // BEZKODER
print(str); // bezkoder
String lowerStr = upperStr.toLowerCase();
print(lowerStr); // bezkoder
print(upperStr); // BEZKODER
复制代码
咱们能够使用intl
库toBeginningOfSentenceCase()
方法将字符串的首字母转换为大写字母,将其余字母转换为小写:
import 'package:intl/intl.dart';
main() {
String sentence = toBeginningOfSentenceCase('bezkoder');
print(sentence); // Bezkoder
}
复制代码
String emp = '';
emp.isEmpty; // true
emp.isNotEmpty; // false
复制代码
检查字符串是否包含子字符串 咱们使用contains()带有签名的方法,以下所示:
bool contains(Pattern substring, [int startIndex = 0]);
复制代码
substring
能够是一个String或一个RegExp
对象。startIndex
(可选):方法所匹配的索引substring
。String s = 'bezkoder';
s.contains('k'); // true
s.contains(RegExp(r'[a-c]')); // true
s.contains('z', 3); // false
s.contains(RegExp(r'[a-c]'), 1); // false
s.contains(RegExp(r'[a-d]'), 1); // true
复制代码
String s = 'bezkoder';
s.startsWith('b'); // true
s.startsWith('z'); // false
s.startsWith('bez'); // true
s.endsWith('r'); // true
s.endsWith('z'); // false
s.endsWith('koder'); // true
复制代码
使用插值
String a = 'bezkoder';
String b = '.com';
String s1 = '$a$b'; // interpolation
String s2 = '$a' '$b'; // separated in one statement
String s3 = a + b; // operator
/* bezkoder.com */
复制代码
String s = '=bezkoder';
print(s*3);
// =bezkoder=bezkoder=bezkoder
复制代码
split()
方法在模式匹配项处拆分字符串,并在匹配项之间返回一个子字符串列表:List split(Pattern pattern);
复制代码
String s1 = 'bezkoder.earth.com';
s1.split('.');
// [bezkoder, earth, com]
String s2 = 'bezkoder2019.com';
s2.split(RegExp(r'[0-9]+'));
// [bezkoder, .com]
String s3 = 'bezkoder';
s3.split('');
// [b, e, z, k, o, d, e, r]
复制代码
splitMapJoin()
一种方法,它能够在一条语句中完成3件事:String splitMapJoin(
Pattern pattern,
{String onMatch(Match match), String onNonMatch(String nonMatch)}
);
复制代码
pattern
能够是一个String或一个RegExp
对象。onMatch
(可选):将每一个匹配项转换为字符串。onNonMatch
(可选):将每一个不匹配的部分转换为字符串。String result = 'bezkoder2019.com'.splitMapJoin(
RegExp(r'[0-9]+'),
onMatch: (m) => '_${m.group(0)}_',
onNonMatch: (n) => '[${n}]');
print(result);
// [bezkoder]_2019_[.com]
result = 'bezkoder2019.com'.splitMapJoin(
RegExp(r'[0-9]+'),
onNonMatch: (n) => '[${n}]');
print(result);
// [bezkoder]2019[.com]
result = 'bezkoder2019.com'.splitMapJoin(
RegExp(r'[0-9]+'),
onMatch: (m) => '_${m.group(0)}_');
print(result);
// bezkoder_2019_.com
复制代码
padLeft()
方法返回具备给定的minimum的右对齐String width
。若是width小于或等于String
的长度,则不添加填充。padRight()
方法返回具备给定的minimum的左对齐String width
。若是width小于或等于String
的长度,则不添加填充。String s = 'bezkoder';
s.padLeft(10); // ' bezkoder'
s.padLeft(10, '='); // '==bezkoder'
s.padRight(10); // 'bezkoder '
s.padRight(10, '='); // 'bezkoder=='
复制代码
trimLeft()
从左侧返回不带空格字符的新String。trimRight()
是从右边开始的。trim()
返回开头或结尾没有任何空格字符的新String。String s = '\tbezkoder.com ';
s.trimLeft(); // 'bezkoder.com '
s.trimRight(); // '\tbezkoder.com'
s.trim(); // 'bezkoder.com'
复制代码
String replaceFirst(Pattern from, String to, [int startIndex = 0]);
String replaceFirstMapped(Pattern from, String replace(Match match),[int startIndex = 0]);
复制代码
replaceFirst()
方法返回一个新字符串替换的第一场比赛from有to来自启动startIndex。replaceFirstMapped()
返回一个新的字符串,其中的第一个匹配项from被replace(match)
函数的结果替换。Dart / Flutter字符串String s = 'bezkoder.com';
s.replaceFirst('e', 'E'); // bEzkoder.com
s.replaceFirst('e', 'E', 3); // bezkodEr.com
s.replaceFirst(RegExp(r'koder'), 'programmer'); // bezprogrammer.com
s.replaceFirstMapped('e', (m) => '[${m.group(0)}]'); // b[e]zkoder.com
s.replaceFirstMapped('e', (m) => '[${m.group(0)}]', 3); // bezkod[e]r.com
复制代码
replaceAll()
方法返回一个新的字符串,该字符串将全部匹配项替换为另外一个字符串。replaceAllMapped()
方法返回一个新的String,其中全部匹配项均被replace(match)函数的结果替换。String s = 'bezkoder.com';
s.replaceAll('e', '[e]');
// b[e]zkod[e]r.com
s.replaceAllMapped(RegExp(r'e.'),
(m) => m.group(0).contains('z') ? m.group(0) : '[' + m.group(0) + ']');
// bezkod[er].com
复制代码
您能够看到该replaceAllMapped()方法在咱们想根据匹配返回新内容的状况下颇有用。
若是咱们想用另外一个String替换一个String的范围而不关心它是什么,咱们能够使用replaceRange()method
:
String replaceRange(int start, int end, String replacement)
; 该方法将取代从子start指标end与指标replacement。
String s = 'bezkoder.com';
s.replaceRange(2, 4, 'zzzzzzzzz');
// bezzzzzzzzzoder.com
复制代码
咱们已经学习了Dart String的许多知识,从建立,获取,验证到转换,分割,联接,修剪String,替换子字符串……,但愿您对如何使用Dart String方法和运算符有一个很好的认识。
flutter实战指南 flutter大神出的书 不少实战分享 籍值得购买~