Built-in types(內(nèi)置的類型)
Dart 內(nèi)置支持下面這些類型:
- numbers
- strings
- booleans
- lists (也被稱之為 arrays)
- maps
- runes (用于在字符串中表示 Unicode 字符)
- symbols
Numbers(數(shù)值)
Dart 支持兩種類型的數(shù)字:
int
整數(shù)值,其取值通常位于和
之間挡毅。
double
64-bit (雙精度) 浮點(diǎn)數(shù)诈豌,符合 IEEE 754 標(biāo)準(zhǔn)。
int
和 double
都是 num
的子類械筛。 num 類型定義了基本的操作符,例如 +, -, /, 和 *, 還定義了 abs()
、ceil()
帚屉、和 floor()
等 函數(shù)。 (位操作符漾峡,例如 >> 定義在 int
類中攻旦。)
整數(shù)是不帶小數(shù)點(diǎn)的數(shù)字。
var x = 1;
var hex = 0xDEADBEEF;
var bigInt = 34653465233243244;
如果一個(gè)數(shù)帶小數(shù)點(diǎn)生逸,則其為 double牢屋。
var y = 1.1;
var exponents = 1.42e5;
下面是字符串和數(shù)字之間轉(zhuǎn)換的方式:
void main() {
// String -> int
var one = int.parse('1');
print("one => ${one == 1}");
// String -> double
var onePointOne = double.parse('1.1');
print("onePointOne => ${onePointOne == 1.1}");
// int -> String
String oneAsString = 1.toString();
print("oneAsString => ${oneAsString == '1'}");
// double -> String
String piAsString = 3.1415926.toStringAsFixed(2);
print("piAsString => ${piAsString == '3.14'}");
}
整數(shù)類型支持傳統(tǒng)的位移操作符,(<<, >>), AND (&), 和 OR (|) 槽袄。例如:
// 0011 << 1 == 0110
print("(3 << 1) == 6 => ${(3 << 1) == 6}");
// 0011 >> 1 == 0001
print("(3 >> 1) == 1 => ${(3 >> 1) == 1}");
// 0011 | 0100 == 0111
print("(3 | 4) == 7 => ${(3 | 4) == 7}");
數(shù)字字面量為編譯時(shí)常量烙无。 很多算術(shù)表達(dá)式只要其操作數(shù)是常量,則表達(dá)式結(jié)果也是編譯時(shí)常量遍尺。
const msPerSecond = 1000;
const secondsUntilRetry = 5;
const msUntilRetry = secondsUntilRetry * msPerSecond;
Strings(字符串)
Dart 字符串是 UTF-16 編碼的字符序列截酷。 可以使用單引號(hào)或者雙引號(hào)來(lái)創(chuàng)建字符串:
var s1 = 'Single quotes work well for string literals.';
var s2 = "Double quotes work just as well.";
var s3 = 'It\'s easy to escape the string delimiter.';
var s4 = "It's even easier to use the other delimiter.";
可以在字符串中使用表達(dá)式,用法是這樣的: ${expression}乾戏。如果表達(dá)式是一個(gè)比賽服迂苛,可以省略 {}。 如果表達(dá)式的結(jié)果為一個(gè)對(duì)象鼓择,則 Dart 會(huì)調(diào)用對(duì)象的 toString() 函數(shù)來(lái)獲取一個(gè)字符串三幻。
var s = 'love';
print('i $s u' == 'i love '+'u');
print('i ${s.toUpperCase()} u' == 'i LOVE u');
可以使用 + 操作符來(lái)把多個(gè)字符串鏈接為一個(gè),也可以把多個(gè)字符串放到一起來(lái)實(shí)現(xiàn)同樣的功能:
var s = 'my youth ' 'my youth is yours,' "trippin'on skies sippin' waterfalls.";
print(s);
使用三個(gè)單引號(hào)或者雙引號(hào)也可以 創(chuàng)建多行字符串對(duì)象:
var s1 = '''
you can create
multi-line strings
like this one.
''';
print(s1);
var s2 = """
This is also a
multi-line string.
""";
print(s2);
字符串字面量是編譯時(shí)常量呐能, 帶有字符串插值的字符串定義赌髓,若干插值表達(dá)式引用的為編譯時(shí)常量則其結(jié)果也是編譯時(shí)常量。
// These work in a const string.
const aConstNum = 0;
const aConstBool = true;
const aConstString = 'a constant string';
// These do NOT work in a const string.
var aNum = 0;
var aBool = true;
var aString = 'a string';
const aConstList = const [1, 2, 3];
const validConstString = '$aConstNum $aConstBool $aConstString';
// const invalidConstString = '$aNum $aBool $aString $aConstList';
Searching inside a string(在字符串內(nèi)搜索)
可以在字符串內(nèi)查找特定字符的位置催跪,還可以判斷字符串是否以特定字符串開(kāi)始和結(jié)尾锁蠕。 例如:
// Check whether a string contains another string.
assert('Never odd or even'.contains('odd'));
// Does a string start with another string?
assert('Never odd or even'.startsWith('Never'));
// Does a string end with another string?
assert('Never odd or even'.endsWith('even'));
// Find the location of a string inside a string.
assert('Never odd or even'.indexOf('odd') == 6);
Extracting data from a string(從字符串中提取數(shù)據(jù))
可以從字符串中獲取到單個(gè)的字符,單個(gè)字符可以是 String 也可以是 int 值懊蒸。 準(zhǔn)確來(lái)說(shuō)荣倾,實(shí)際得到的是一個(gè) UTF-16 code units; 對(duì)于碼率比較大的字符骑丸,實(shí)際得到的是兩個(gè) code units舌仍,例如 treble clef 符號(hào) (‘\u{1D11E}’) 。
還可以從字符串中提取一個(gè)子字符串通危,或者把字符串分割為 多個(gè)子字符串:
// Grab a substring.
assert('Never odd or even'.substring(6, 9) == 'odd');
// Split a string using a string pattern.
var parts = 'structured web apps'.split(' ');
assert(parts.length == 3);
assert(parts[0] == 'structured');
// Get a UTF-16 code unit (as a string) by index.
assert('Never odd or even'[0] == 'N');
// Use split() with an empty string parameter to get
// a list of all characters (as Strings); good for
// iterating.
for (var char in 'hello'.split('')) {
print(char);
}
// Get all the UTF-16 code units in the string.
var codeUnitList = 'Never odd or even'.codeUnits.toList();
assert(codeUnitList[0] == 78);
Converting to uppercase or lowercase(大小寫(xiě)轉(zhuǎn)換)
字符串大小寫(xiě)轉(zhuǎn)換是非常 簡(jiǎn)單的:
// Convert to uppercase.
assert('structured web apps'.toUpperCase() ==
'STRUCTURED WEB APPS');
// Convert to lowercase.
assert('STRUCTURED WEB APPS'.toLowerCase() ==
'structured web apps');
Trimming and empty strings(裁剪和判斷空字符串)
trim() 函數(shù)可以刪除字符串前后的空白字符铸豁。使用 isEmpty 可以 判斷字符串是否為空(長(zhǎng)度為 0)。
// Trim a string.
assert(' hello '.trim() == 'hello');
// Check whether a string is empty.
assert(''.isEmpty);
// Strings with only white space are not empty.
assert(!' '.isEmpty);
Replacing part of a string(替換部分字符)
Strings 是不可變的對(duì)象菊碟,可以創(chuàng)建他們但是無(wú)法修改节芥。 如果你仔細(xì)研究了 String API 文檔,你會(huì)注意到并沒(méi)有 函數(shù)可以修改字符串的狀態(tài)。 例如头镊,函數(shù) replaceAll()
返回一個(gè)新的 String 對(duì)象而不是修改 舊的對(duì)象:
var greetingTemplate = 'Hello, NAME!';
var greeting = greetingTemplate
.replaceAll(new RegExp('NAME'), 'Bob');
assert(greeting !=greetingTemplate); // greetingTemplate didn't change.
Building a string(創(chuàng)建字符串)
使用 StringBuffer 可以在代碼中創(chuàng)建字符串蚣驼。 只有當(dāng)你調(diào)用 StringBuffer 的 toString() 函數(shù)的時(shí)候,才會(huì)創(chuàng)建一個(gè) 新的 String 對(duì)象相艇。而 writeAll() 函數(shù)還有一個(gè)可選的參數(shù)來(lái)指定每個(gè)字符串的分隔符颖杏, 例如下面指定空格為分隔符:
var sb = new StringBuffer();
sb..write('Use a StringBuffer for ')
..writeAll(['efficient', 'string', 'creation'], ' ')
..write('.');
var fullString = sb.toString();
assert(fullString ==
'Use a StringBuffer for efficient string creation.');
Regular expressions(正則表達(dá)式)
RegExp 類提供了 JavaScript 正則表達(dá)式同樣的功能。 正則表達(dá)式可以高效率的搜索和匹配 字符串坛芽。
// Here's a regular expression for one or more digits.
var numbers = new RegExp(r'\d+');
var allCharacters = 'llamas live fifteen to twenty years';
var someDigits = 'llamas live 15 to 20 years';
// contains() can use a regular expression.
assert(!allCharacters.contains(numbers));
assert(someDigits.contains(numbers));
// Replace every match with another string.
var exedOut = someDigits.replaceAll(numbers, 'XX');
assert(exedOut == 'llamas live XX to XX years');
關(guān)于String的更多內(nèi)容請(qǐng)前往: String API 文檔