Dart / Flutter字符串方法和运算符教程(含示例) DartString是UTF-16(16位Unicode转换格式)代码单元的序列。它使Dart更加强大,可以用任何语言构建我们的移动和Web应用程序。在本教程中,我们将介绍许多有用的Dart字符串方法和运算符。你会知道:
在Dart / Flutter中创建某种字符串的方法 方法从Dart / Flutter中的字符串获取数据 在Dart / Flutter中验证字符串中的数据的基本方法 如何在Dart / Flutter中转换,分割,合并和修剪字符串 在Dart / Flutter中替换字符串中的子字符串的某种方法 创建普通的字符串 要创建一个字符串,我们可以使用单引号或双引号: 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!
创建原始字符串 对于原始字符串,我们将r在字符串的引号之前使用: String raws1 = r'bezkoder.com\nMobile App Development tutorials'; print(raws1); // bezkoder.com\nMobile App Development tutorialsString raws2 = r"It\'s not easy to become a developer, but worthy!"; print(raws2); // It\'s not easy to become a developer, but worthy!
创建多行字符串 我们将使用三引号创建多行字符串:
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 */
使用UTF-32单位创建字符串 我们知道Dart字符串是UTF-16代码单元的序列。因此,要使用UTF-32单位创建字符串,我们需要使用特定的语法:
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: α β γ δ ε
Dart / Flutter通过索引获取字符 通过索引获取一个字符 现在,我们将Dart字符串视为一个列表,其中每个字符都作为一个项目: String str = 'bezkoder.com - Mobile code examples'; str[0]; // b str[2]; // z
在上面的代码中,我们使用Dart String运算符[]。 在Dart / Flutter中获取子字符串 要从Dart字符串获取子字符串,我们使用substring()方法: 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]);
例如,我们希望’r’是结尾。在“ bezkoder.com”中,“ r”的索引为7。因此,我们需要设置endIndex的8。
Dart / Flutter获取字符串中字符/子字符串的位置 For the first 我们可以使用以下indexOf()
方法来做到这一点:
String s = 'bezkoder.com'; s.indexOf('e'); // 1 s.indexOf('er'); // 6 s.indexOf(RegExp(r'e.')); // 1 s.indexOf('code'); // -1
indexOf()-1
如果没有匹配项,将返回。
For the last 我们可以使用以下lastIndexOf()
方法来做到这一点:
String s = 'bezkoder.com'; s.lastIndexOf('e'); // 6 s.lastIndexOf(RegExp(r'e.')); // 6 s.lastIndexOf('code'); // -1
lastIndexOf()-1
如果没有匹配项,将返回。
Dart / Flutter转换String方法 toUpperCase()
并且toLowerCase()
方法返回一个新字符串(不更改原始字符串),并且所有字母均已转换为大写或小写格式:
String str = 'bezkoder'; String upperStr = str.toUpperCase(); print(upperStr); // BEZKODER print(str); // bezkoderString lowerStr = upperStr.toLowerCase(); print(lowerStr); // bezkoder print(upperStr); // BEZKODER
Dart / Flutter首字母大写 我们可以使用intl
库toBeginningOfSentenceCase()
方法将字符串的首字母转换为大写字母,将其他字母转换为小写:
import 'package:intl/intl.dart';main() {String sentence = toBeginningOfSentenceCase('bezkoder');print(sentence); // Bezkoder }
Dart / Flutter 验证字符串 检查空字符串 我们使用Dart字符串属性isEmpty或isNotEmpty了解字符串是否为空: 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]')); // trues.contains('z', 3); // false s.contains(RegExp(r'[a-c]'), 1); // false s.contains(RegExp(r'[a-d]'), 1); // true
检查字符串是否以字符/字符串开头/结尾 我们可以使用endsWith()方法来做到这一点: String s = 'bezkoder';s.startsWith('b'); // true s.startsWith('z'); // false s.startsWith('bez'); // trues.endsWith('r'); // true s.endsWith('z'); // false s.endsWith('koder'); // true
Dart / Flutter连接和拆分字符串方法 连接/连接字符串 我们有3种方式连接两个Dart字符串: 使用插值
一条语句中的单独字符串使用Dart字符串运算符 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 */
将字符串与其自身连接使用Dart字符串运算符*,我们可以将字符串乘以多次: String s = '=bezkoder'; print(s*3); // =bezkoder=bezkoder=bezkoder
分割字符串该split()
方法在模式匹配项处拆分字符串,并在匹配项之间返回一个子字符串列表: List split(Pattern pattern);
该pattern输入参数可以是一个String或一个RegExp对象。例如: 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]
分割字符串,转换,然后连接字符串 Dart提供了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
Flutter/Dart对齐文本 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=='
Flutter/Dart装饰 trimLeft()
从左侧返回不带空格字符的新String。trimRight()
是从右边开始的。trim()
返回开头或结尾没有任何空格字符的新String。 String s = '\tbezkoder.com '; s.trimLeft(); // 'bezkoder.com ' s.trimRight(); // '\tbezkoder.com' s.trim(); // 'bezkoder.com'
Flutter/Dart String替换方法 For the first 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.coms.replaceFirstMapped('e', (m) => '[${m.group(0)}]'); // b[e]zkoder.com s.replaceFirstMapped('e', (m) => '[${m.group(0)}]', 3); // bezkod[e]r.com
For the last replaceAll()
方法返回一个新的字符串,该字符串将所有匹配项替换为另一个字符串。replaceAllMapped()
方法返回一个新的String,其中所有匹配项均被replace(match)函数的结果替换。 String s = 'bezkoder.com'; s.replaceAll('e', '[e]'); // b[e]zkod[e]r.coms.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大神出的书 很多实战分享 籍值得购买~