iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
0
Software Development

Dart 語言 - 開啟 Flutter 的鑰匙系列 第 4

Day4:內建型態 - 字串 (Strings)

  • 分享至 

  • xImage
  •  

String 是由一連串 UTF-16 編碼的字元組成的。

如何定義一個 String?

var string1 = 'This is string.';
var string2 = "This is string too.";
var multiple_line_string1 = ''' 
"There is no one who loves pain itself, who seeks after it and wants to have it, simply because it is pain..."
''';
var multiple_line_string2 = """
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ultrices,
 leo eget malesuada vehicula, quam urna sodales mi, ut finibus.""";

發現什麼?

我們可以使用單引號、雙引號、三個單引號以及三個雙引號定義字串。

為什麼需要四種方式呢?

我們可以將這四種方式分成兩類,單引號與雙引號是用來定義一般的字串。三個單引號以及三個雙引號則是用來定義多行的字串。

單引號 VS 雙引號

  • 單引號:如果你的字串裡面有包含雙引號,當使用單引號定義變數時,不需使用跳脫符號。
  • 雙引號:與單引號相反,如果你的字串裡面有包含單引號,那麼使用雙引號定義變數時,不需要跳脫符號。

例如:

var string1 = 'It\'s my book';
var string2 = "It's my book";

var string3 = '"Hello", She said';
var string4 = "\"Hello\",She said";

三個單引號 VS 三個雙引號

  • 三個單引號:適用於定義多行字串,如同單引號定義,如果字串裡包含雙引號,則不需要跳脫符號。
  • 三個雙引號:適用於定義多行字串,如同雙引號定義,如果字串裡包含單引號,則不需要跳脫符號。

字串串接

如果要將兩個字串串接在一起,可以使用運算子 + 。

var concatenate_string = "Hello"+" World";
print(concatenate_string); 
// Hello World

我們也可以直接將 + 省略,Dart 會將相鄰的字串串接起來,串接的符號 (+) 可以被隱藏起來。

var concatenate_string = "Hello" " World";
print(concatenate_string); 
// Hello World

前面介紹,我們可以將兩個字串利用運算子 + 將兩個字串串接起來。

如果我們要串接的是一個數值呢?

print("Sum: 3 + 2 = " +
3 + 2);

上方的範例中,嘗試用運算子 + 串接字串與加法運算,但是運算子 + 後面必須要是字串,所以編譯器會發生錯誤。

可以將後方運算子用括弧包起來,在利用 int 類的 toString() 轉換成字串,如此就可以串接。

print("Sum: 3 + 2 = " +
(3 + 2).toString());

但,非得要這麼麻煩嗎?

字串插值 (String interpolation)

在字串中,利用運算子 ${ },將運算子插入字串中,包在字串中的任何物件,都會被呼叫其 toString() 方法。

print("Sum: 3 + 2 = ${3+2}");
// Sum: 3 + 2 = 5

如果插入的物件沒有包含其他符號,可以忽略括弧。

var city = "Taipei";
print("I live in $city");
// I live in Taipei.

跳脫字元 (Escape Characters)、跳脫序列 (Escape Sequences)

若將某些有其他意義的字元放在字串中,該字串有可能無法正確使用或顯示錯誤,如前面介紹的單引號 (') 及雙引號 ("),此時可以使用跳脫字元,避免字串因特殊字元而出錯。

print('It\'s my dog');
// It's my dog

print("This is \n new line");
//This is 
// new line

除了跳脫字元外,也可以使用跳脫序列

  • 跳脫序列就是由多個字元組成的。
print("This is \n new line");

//等同於

print("This is \x0A new line");

UTF-16 字元

在字串中,可以使用 \u{UTF-16 Code} 插入 UTF-16 字元,

print("\u0024");
// $

跳脫字元、跳脫序列表

原始字串 (Raw String)

前面的範例中,無論是字串插值、跳脫符號、跳脫序列、等等...,都是 String 直接做處理的,如果我們不想要 String 替我們自動處理這些特殊的字元,我們希望使用包含特殊字元的文字,我們該如何做呢?

  • 在字串的前方加上 r ,則此字串會被宣告為 Raw string,String 類就不會對裡面的特殊字元做處理。
print("Hello \tworld");
//Hello 	world

print(r"Hello \tworld");
//Hello \tworld

codeUnitAt、codeUnits

字串是由一連串的 UTF-16 的字元所組成的,我們可以使用 codeUnitAt 取得特定位置的 UTF-16 碼,或是使用 codeUnits 取得所有的UTF-16碼。

string = 'Dart';
string.codeUnitAt(0); // 68
string.codeUnits; // [68, 97, 114, 116]

小結

Dart 的字串含有字串插值的功能,可以輕易的把物件與字串結合。

利用不同的符號來宣告字串,能夠減少多餘的跳脫符號。

由於字串是由 UTF-16 字元所組成,所以可以輕鬆地在字串中使用 UTF-16 的字元。


上一篇
Day3:內建型態-數字 (Numbers)
下一篇
Day5:內建型態 (集合) -Lists
系列文
Dart 語言 - 開啟 Flutter 的鑰匙30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言