rust 格式化输出

说明

在rust中, 模块std::fmt 用来格式化输出字符串,可以使用format!对字符串进行格式化。print!、println!与format!非常接近,唯一不同的地方在于 print!会将要输出的内容打印到控制台,println! 会在输出的内容打印到控制台后进行换行。

引子

以下是一些格式化输出的例子

print!("hello");                 // => "hello"
print!("hello,{}!","world");     // => "hello world!"
print!("the num is {}", 1);      // => "the num  is 1"
print!("{:?}", (3,4));           // => "(3,4)"
print!("{val}", val=4);          // => "4"
print!("{} {}", 1,2);            // => "1 2"
print!("{:04}",42);              // => "0042"

print! 接受的是可变参数,第一个参数是一个字符串常量,它表示最终输出的字符串的格式,第一个参数可以看到类似{}的符号 ,它相当于占位符,可以在最终的结果里面按照指定的规则进行替换。如下所示:

print!("{}{}",1,2);             //=> "12"
print!("{1}{0}",1,2);           //=>"21"
print!("{1}{}{0}{}",1,2);       //=>2112

##带变量的名称
除了指定参数的位置外, print!也指定了参数的名字,如下:

print!("{arg}",arg = "tyest");      //=>"test"
print!("{name} {}",1, name =2);     //=>"2 1"
print!("{a} {c} {b}",a ="a",b ='b', c=3);       //=>"a 3 b"

需要注意的是,带名字的参数必须放在不带名字的参数的后面,以下例子无法通过编译:

print!("{abc} {1}", abc = "def", 2);

格式化参数

宽度

例子如下:
以下是一些格式化输出的例子

println!("Hello {:5}!", "x");
println!("Hello {:1$}!", "x", 5);
println!("Hello {1:0$}!", 5, "x");
println!("Hello {:width$}!", "x", width = 5);
//以上的所有结果都为 "hello x     !"

可以看到,例子中{}里面多了一个:,后面的参数叫做“最小宽度“,如果宽度不够,需要填充和对齐。“最小宽度”可以指定,指定的时候 会在最后跟一个 美元符号。冒号前面可以指定被格式化的参数的位置,如果上面第三个例子不指定,结果就会改变,如下:

print!("hello {:1$}!{}","x",5);    //=>hello x     !5

填充和对齐

如果不指定对齐方式,rust 会用默认的方式进行填充和对齐,对于非数字,采用的是空格填充左对齐,数字采用的是空格填充右对齐。查看以下例子看如何对齐:

assert_eq!(format!("Hello {:<5}!", "x"),  "Hello x    !");
assert_eq!(format!("Hello {:-<5}!", "x"), "Hello x----!");
assert_eq!(format!("Hello {:^5}!", "x"),  "Hello   x  !");
assert_eq!(format!("Hello {:>5}!", "x"),  "Hello     x!");

1.fill<: 表示左对齐,用fill进行填充,比如上面例子的第1个和第2个。

2.fill^: 居中对齐。

3.fill>: 右对齐。

符号/#/0

assert_eq!(format!("Hello {:+}!", 5), "Hello +5!");
assert_eq!(format!("{:#x}!", 27), "0x1b!");
assert_eq!(format!("Hello {:05}!", 5),  "Hello 00005!");
assert_eq!(format!("Hello {:05}!", -5), "Hello -0005!");
assert_eq!(format!("{:#010x}!", 27), "0x0000001b!");

1.+: 表示永远打印数字的符号,默认情况下不会打印正数的符号。

2.#: 表示采用其他形式来输出结果:

#b: 表示用二进制输出,比如下面的例子,我们可以看到最小宽度是10,并且10包含了0b这两个字符。

println!("Hello {:#010b}!", 10); //=> Hello 0b00001010!

#o: 表示用8进制输出
 #x : 表示用16进制小写输出(即:a,b,c,d,e,f)
 #X : 表示用16进制大写输出(即:A,B,C,D,E,F)

0:表示整数使用0进行填充。对于正数1,{:08}的结果是00000001,8表示是宽度;对于-1,{:08}的结果是-0000001,注意-占了一位。

精度

精度的语法和前面宽度的语法有点类似,先介绍一些语法,然后再举例说明实际的用法。

.N:其中N表示精度值。

.N$:和宽度一样,可以指定某个参数来表示精度值。

.* : 它的意思是{}会接收两个输入,第一个输入表示的是精度,第二个输入将要被格式化的值。如果采用以下的形式:{:.*},那么是要被格式化的值,之前的一个参数表示精度。
 对于非数字类型的数据,精度相当于最大长度,如果格式化结果的长度比精度大,会进行截断,下面是一个例子:

//结果都是:  Hello abcdefg!
println!("Hello {:.1$}!", "abcdefg", 10);
println!("Hello {:.10}!", "abcdefg");
println!("Hello {0:.10}!", "abcdefg");
println!("Hello {:.*}!", 10, "abcdefg");
println!("Hello {1:.*}!", 10, "abcdefg");
//下面这个结合宽度和精度
println!("Hello {0:+>7.4}!", "abcdefg"); //=> Hello +++abcd!

对于整数,精度会被忽略,对于浮点数,精度表示小数点之后需要打印多少位。

// Hello {arg 0 ("x")} is {arg 2 (0.01) with precision specified in arg 1 (5)}
println!("Hello {0} is {2:.1$}", "x", 5, 0.01);

rust 格式化输出相关推荐

  1. Rust格式化输出:println、format格式化参数详解

    文章目录 基本姿势 打印2/8/16进制 打印内存地址(指针或引用) 科学计数 使用参数索引和命名参数 padding和对齐 相关的宏 参考标准库文档 Rust的format!.println!宏实现 ...

  2. 【一起学Rust】Rust学习前准备——注释和格式化输出

    提示:准备热身. 文章目录 前言 一.注释 1. 普通注释 2. 文档注释 二.格式化输出 输出字符串 输出带有占位符的字符串 输出带有指定格式占位符的字符串 指定宽度对齐 数字输出缺位补0 总结 注 ...

  3. C和C++安全编码笔记:格式化输出

    C标准中定义了一些可以接受可变数量参数的格式化输出参数,参数中包括一个格式字符串.printf()和sprintf()都是格式化输出函数的例子.格式化输出函数是由一个格式字符串和可变数目的参数构成的. ...

  4. python中weekid什么意思_week_one-python格式化输出

    1.多行格式化输出 (1) 1 #Author:larlly 2 name = input("input your name :")3 age = input("inpu ...

  5. python - 字符串的格式化输出

    # -*- coding:utf-8 -*- '''@project: jiaxy@author: Jimmy@file: study_2_str.py@ide: PyCharm Community ...

  6. C#:String.Format数字格式化输出

    C#:String.Format数字格式化输出 int a = 12345678;    //格式为sring输出 //   Label1.Text = string.Format("asd ...

  7. 2500 字全方面解读 Python 的格式化输出

    作者 | 欣一 来源 | Python爱好者集中营 今天小编来和大家聊聊Python当中的格式化输出,希望会对大家所有帮助 %占位符的使用 我们先来看一下下面的这个例子, country_ = &qu ...

  8. python格式化输出print()

    作⽤:程序输出内容给⽤户 1. 格式化输出         所谓的格式化输出即按照⼀定的格式输出内容. 1.1 格式化符号 技巧     %06d,表示输出的整数显示位数,不⾜以0补全,超出当前位数则 ...

  9. python里的tplt什么意思 Python的format格式化输出

    Python的格式化输出 方法一:传统方法 与C语言类似,可以采用"%"作为格式化输出的标记.如:  print("The first number: %5d, the ...

最新文章

  1. java中substring函数
  2. 主机访问虚拟机中linux上的web服务
  3. 开发实战细节之——关于整型转换为字符串类型的性能与实现分析
  4. 【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取
  5. 邹建老大写的经典SQL
  6. java visitor_java11教程--接口FileVisitor用法
  7. const php 数组,php-如何在该类中创建类实例的const数组?
  8. 根据控件ID得到句柄
  9. 连接ftp服务器响应时间长,事务响应时间
  10. http虚拟主机的简单配置训练
  11. spark 机器学习一 聚类算法案例小结
  12. win7 OneNote不能登录一直登录
  13. 转未来10年35项最值得你期待的技术
  14. python数据分析(六)—数据清洗2
  15. 更新harbor证书
  16. ​Android实现仿QQ登录可编辑下拉菜单
  17. 微信红包金额分配的算法
  18. Python单词反写、单词倒排
  19. jxls对比_久别重逢 QQ影音4.0跟旧版对比更新了什么?
  20. python三国演义人物 统计分析_python统计三国演义人物出场次数

热门文章

  1. 小学计算机基础知识汇总,电脑基础知识:内存条知识大全,看完小学生都了解...
  2. using the Connector/J connection property 'autoReconnect=true' to avoid this problem
  3. Word中Mathtype公式编辑无法打空格解决
  4. pvid与access的关系_{华为HCNA-RS}关于Trunk、Hybrid、Access、Tag、Untag、Pvid的关系与区别...
  5. ESP8266 NodeMCU开发板连接手机热点问题
  6. Android studio 电话号码归属地查询app简易版
  7. 谷歌浏览器自带翻译网页插件没用了怎么办?这里有解决办法。
  8. 球队分组(java源码)
  9. 工作电子邮箱怎么注册,电子邮箱格式怎么写?
  10. 专业计算机基础教学,计算机基础教学计划范文五篇