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中除了普通的算术运算的操作符之外,还 ...
随机推荐
- 阿里云函数计算发布新功能,支持容器镜像,加速应用 Serverless 进程
我们先通过一段视频来看看函数计算和容器相结合后,在视频转码场景下的优秀表现.点击观看视频 >> FaaS 的门槛 Serverless 形态的云服务帮助开发者承担了大量复杂的扩缩容.运维. ...
- BG的本性
BG的本性 更舒适的体验 算法一: 我还会暴力!模拟一下 复杂度 \(O(nm)\), 期望得分10 算法二: 用线段树优化枚举,直接找可行点 复杂度 \(O(\mathrm{ans} \log_2 ...
- Winform同步调用异步函数死锁原因分析、为什么要用异步
1.前言 几年前,一个开发同学遇到同步调用异步函数出现死锁问题,导致UI界面假死.我解释了一堆,关于状态机.线程池.WindowsFormsSynchronizationContext.Post.co ...
- [源码解析]PyTorch如何实现前向传播(2) --- 基础类(下)
[源码解析]PyTorch如何实现前向传播(2) --- 基础类(下) 目录 [源码解析]PyTorch如何实现前向传播(2) --- 基础类(下) 0x00 摘要 0x01 前文回顾 0x02 Te ...
- 基于Apache Hudi 的CDC数据入湖
作者:李少锋 文章目录: 一.CDC背景介绍 二.CDC数据入湖 三.Hudi核心设计 四.Hudi未来规划 1. CDC背景介绍 首先我们介绍什么是CDC?CDC的全称是Change data Ca ...
- 理解ASP.NET Core - 文件服务器(File Server)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 提供静态文件 静态文件默认存放在 Web根目录(Web Root) 中,路径为 项目根目录(C ...
- 在纯JaveScript中实现报表导出:从“PDF”到“JPG”
我们在前端报表中完成了各种工作数据的输入或内容处理之后,需要做什么? 数据的导出! 这些数据的常用导出格式有:PDF.Excel.HTML和图片几大类型. 但总有一些实际应用场景,需要的不仅仅是将现有 ...
- Vue-cli4.xPC端项目Rem适配
适配准备 安装 (amfe-flexible) 和(postcss-px2rem) 1, 安装依赖并在main.js中引入该依赖 npm i amfe-flexible import "am ...
- Go语言核心36讲(Go语言进阶技术十四)--学习笔记
20 | 错误处理 (下) 在上一篇文章中,我们主要讨论的是从使用者的角度看"怎样处理好错误值".那么,接下来我们需要关注的,就是站在建造者的角度,去关心"怎样才能给予使 ...
- IP数据报中如果不分片,分片标志值是什么?
过了好久才解决这个简单的问题,罪过罪过- 答案:如果IP数据报不分片,分片标志DF(Don't Fragment)会被设置为1.分片标志MF(More Fragment)设置为0. 下面是详细解释: ...