Dart / Flutter String 經常使用方法

Dart / Flutter字符串方法和運算符教程(含示例) DartString是UTF-16(16位Unicode轉換格式)代碼單元的序列。它使Dart更增強大,能夠用任何語言構建咱們的移動和Web應用程序。在本教程中,咱們將介紹許多有用的Dart字符串方法和運算符。你會知道:git

  • 在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 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 */
複製代碼

使用UTF-32單位建立字符串

咱們知道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: α β γ δ ε
複製代碼

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]);
複製代碼
  • startIndex:開始的字符索引。起始索引爲0。ui

  • endIndex(可選):結束字符+的索引1。若是未設置,則結果將是從startIndex字符串開始到結尾的子字符串。spa

例如,咱們但願'r'是結尾。在「 bezkoder.com」中,「 r」的索引爲7。所以,咱們須要設置endIndex的8。code

Dart / Flutter獲取字符串中字符/子字符串的位置

For the first

咱們能夠使用如下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若是沒有匹配項,將返回。

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);      // bezkoder

String lowerStr = upperStr.toLowerCase();
print(lowerStr); // bezkoder
print(upperStr); // BEZKODER
複製代碼

Dart / Flutter首字母大寫

咱們能夠使用intltoBeginningOfSentenceCase()方法將字符串的首字母轉換爲大寫字母,將其餘字母轉換爲小寫:

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]'));    // true

s.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'); // true

s.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.com

s.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.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大神出的書 不少實戰分享 籍值得購買~

相關文章
相關標籤/搜索