dart系列之:在dart中使用数字和字符串
简介
要想熟悉一种语言,最简单的做法就是熟悉dart提供的各种核心库。dart为我们提供了包括dart:core,dart:async,dart:math,dart:convert,dart:html和dart:io这几种常用的库。
今天给大家介绍一下dart:core中的数字和字符串的使用。
数字
dart:core中定义了三种类型的数字,分别是num,int和double。
num是所有数字的总称。int和double都是继承自num,是num的子类。
事实上,dart:core中还有以一种数据类型叫做BigInt,BigInt是一种独立的数据类型,并不是num的子类:
abstract class BigInt implements Comparable<BigInt>
数字中最常见的操作就是将字符串转换为数字,转换可以调用parse方法,先看下num中parse方法的定义:
static num parse(String input, [@deprecated num onError(String input)?]) {
num? result = tryParse(input);
if (result != null) return result;
if (onError == null) throw FormatException(input);
return onError(input);
}
传入的input可以是十进制、也可以是十六进制,如下所示:
assert(int.parse('18') == 18);
assert(int.parse('0x05') == 5);
assert(double.parse('0.50') == 0.5);
num.parse会将对应的字符转换成为int或者double类型:
assert(num.parse('18') is int);
assert(num.parse('0.50') is double);
parse方法还可以传入字符串对应的基数,比如是十进制还是十六进制:
assert(int.parse('11', radix: 16) == 17);
上面我们讲到了如何将字符串转换成为数字,下面是如何将数字转换成为字符串,num提供了toString()方法,可以方便的将int和double转换成为string。
assert(18.toString() == '18');
assert(3.1415.toString() == '3.1415');
对于小数来说,可以使用toStringAsFixed来指定小数的位数:
assert(3.1415.toStringAsFixed(2) == '3.14');
如果要使用科学记数法的话,可以使用toStringAsPrecision:
assert(314.15.toStringAsPrecision(2) == '3.1e+2');
字符串
所有的字符串在dart中都是以UTF-16进行编码的,dart中的string定义了很多常用的并且非常有用的方法。
比如在字符串中进行查询:
assert('www.flydean.com'.contains('flydean'));
assert('www.flydean.com'.startsWith('www'));
assert('www.flydean.com'.endsWith('com'));
assert('www.flydean.com'.indexOf('flydean') == 4);
从字符串中截取子串:
assert('www.flydean.com'.substring(4, 11) == 'flydean');
将字符串按照特定字符进行截取:
var parts = 'www.flydean.com'.split('.');
assert(parts.length == 3);
那么dart中对应中文的支持是这么样的呢? 因为dart中所有的字符都是以UTF-16来表示的,如果一个UTF-16单元能够表示对应的字符,则中文使用起来也是没有问题的:
assert('你好吗?'.substring(1,2) == '好');
assert('你好吗?'[1] == '好');
但是有些字符使用一个UTF-16单元是表示不了的,这时候就需要用到 characters 包对特定的字符进行处理。
字符串转换为大写或者小写:
assert('www.flydean.com'.toUpperCase() ==
'WWW.FLYDEAN.COM');
// Convert to lowercase.
assert('WWW.FLYDEAN.COM'.toLowerCase() ==
'www.flydean.com');
dart提供了 trim()方法,可以对字符串前后端的空格进行截取:
assert(' www.flydean.com '.trim() == 'www.flydean.com');
StringBuffer
除了显示的字符串来创建字符以外,dart还提供了StringBuffer类,通过StringBuffer类我们可以自由创建字符串:
var sb = StringBuffer();
sb
..write('www.flydean.com ')
..writeAll(['is', 'very', 'good'], ' ')
..write('.');
var fullString = sb.toString();
上面代码输出:"www.flydean.com is very good."
其中writeAll() 将传入的字符数组以特定的连接符进行连接。
总结
以上就是dart中数字和字符串的介绍。
本文已收录于 http://www.flydean.com/14-dart-number-string/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
dart系列之:在dart中使用数字和字符串的更多相关文章
- dart系列之:在dart中使用packages
目录 简介 pubspec.yaml get packages 使用packages 升级依赖 总结 简介 java中使用jar包来封装有用的功能,然后将其分发到maven仓库中,供其他人使用.同样的 ...
- c++ 中的数字和字符串的转换
理由:一直忘记数字型的字符串和数字之间的转换,这次总结一下,以便后面再次用到. 其实 C++ 已经给我们写好了相应的函数,直接拿来用即可 QA1:如何把一个数字转换为一个数字字符串?(这个不是很常用) ...
- dart系列之:在dart中使用生成器
目录 简介 两种返回类型的generator Stream的操作 总结 简介 ES6中在引入异步编程的同时,也引入了Generators,通过yield关键词来生成对应的数据.同样的dart也有yie ...
- C语言中把数字转换为字符串 【转】
在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望.由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出 ...
- 解决oracle语句中 含数字的字符串按数字排序问题
普通排序利用:order by 字段名 ASC 但是遇到有中文而且类型是varchar类型的结果就是这样 政采代(甲)字第0298号 政采代(甲)字第0421号 政采代(甲)字第1098号 政采代(甲 ...
- python基础(5):数字和字符串类型
今天总结一下数据类型中的数字和字符串型. 预习: 小练习 一.数字(int,float) 在python3中数字类型只有整形,浮点型,复数.而复数在平时的编程中几乎用不到所以我们只要掌握整形和浮点型即 ...
- Java自学-数字与字符串 字符串转换
Java中把数字转换为字符串,字符串转换为数字 步骤 1 : 数字转字符串 方法1: 使用String类的静态方法valueOf 方法2: 先把基本类型装箱为对象,然后调用对象的toString pa ...
- dart系列之:dart语言中的内置类型
目录 简介 Null 数字 字符串 布尔值 列表 set和map 简介 和所有的编程语言一样,dart有他内置的语言类型,这些内置类型都继承自Object,当然这些内置类型是dart语言的基础,只有掌 ...
- dart系列之:dart语言中的特殊操作符
dart系列之:dart语言中的特殊操作符 目录 简介 普通操作符 类型测试操作符 条件运算符 级联符号 类中的自定义操作符 总结 简介 有运算就有操作符,dart中除了普通的算术运算的操作符之外,还 ...
随机推荐
- Data Management Tools(数据管理工具)《二》
(数据管理工具)<二> 点击跳转(数据管理工具)<一> 16.打包 # Process: 共享包 arcpy.SharePackage_management("&qu ...
- Python内置高阶函数map()
map()函数map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 例如,对于lis ...
- Go语言核心36讲(Go语言基础知识六)--学习笔记
06 | 程序实体的那些事儿 (下) 在上一篇文章,我们一直都在围绕着可重名变量,也就是不同代码块中的重名变量,进行了讨论.还记得吗? 最后我强调,如果可重名变量的类型不同,那么就需要引起我们的特别关 ...
- CompleteFuture实现简单的任务编排实践
CompleteFuture实现简单的任务编排实践 一:前言 CompleteFuture是java8 新提供的API,是对函数式编程思想的体现,提供了很多的对于函数式编程支持.不止有同步处理功能 ...
- v72.01 鸿蒙内核源码分析(Shell解析) | 应用窥伺内核的窗口 | 百篇博客分析OpenHarmony源码
子曰:"苟正其身矣,于从政乎何有?不能正其身,如正人何?" <论语>:子路篇 百篇博客系列篇.本篇为: v72.xx 鸿蒙内核源码分析(Shell解析篇) | 应用窥视 ...
- FastAPI 学习之路(四十二)定制返回Response
我们想要在接口中返回xml格式的内容,我们应该如何实现呢. from fastapi import FastAPI,Response @app.get("/legacy/") de ...
- 六个好习惯让你的PCB设计更优(转)
PCB layout工程师每天对着板子成千上万条走线,各种各样的封装,重复着拉线的工作,也许很多人会觉得是很枯燥无聊的工作内容.看似软件操作搬运工,其实设计人员在过程中要在各种设计规则之间做取舍,兼顾 ...
- Python课程笔记(四)
1.模块的导入 相当于Java的包或C语言的头文件 (1) import math s = math.sqrt(25) print(s) (2) from math import sqrt s=mat ...
- 攻防世界 杂项 9.a_good_idea
题目描述: 汤姆有个好主意 解题思路: 首先按照隐写思路找了一下没找到flag,接着使用winhex打开图片,发现图片里面又包含了一张图片,然后马上改了一下后缀为zip, 解压后发现里面有:hint. ...
- popStar手机游戏机机对战程序
DFS算,五分钟如果答案没有更新,那个解一般来说就很优了. #include <cstdio> #include <iostream> #include <string. ...