c# 字符串操作总结
作者:Liam Wang 发布时间:2022-03-16 05:59:25
标签:c#,字符串,操作
字符串操作在任意编程语言的日常编程中都随处可见,今天来汇总一下 C# 中关于字符串的一些你可能遗忘或遗漏的知识点。
逐字字符串
在普通字符串中,反斜杠字符是转义字符。而在逐字字符串(Verbatim Strings)中,字符将被编程器按照原义进行解释。使用逐字字符串只需在字符串前面加上 @ 符号。
// 逐字字符串:转义符
var filename = @"c:\temp\newfile.txt";
Console.WriteLine(filenaame);
// 逐字字符串:多行文本
var multiLine = @"This is a
multiline paragraph.";
Console.WriteLine(multiLine);
// 非逐字字符串
var escapedFilename = "c:\temp\newfile.txt";
Console.WriteLine(escapedFilename);
输出:
c:\temp\newfile.txt
This is a
multiline paragraph.
c: emp
ewfile.txt
逐字字符串中唯一不被原样解释的字符是双引号。由于双引号是定义字符串的关键字符,所以在逐字字符串中要表达双引号需要用双引号进行转义。
varstr = @"""I don't think so"", he said.";
Console.WriteLine(str);
// 输出:"I don't think so", he said.
在逐字字符串中也可以 $ 符号实现字符串内插值。
Console.WriteLine($@"Testing \n 1 2 {5 - 2}");
// 输出:Testing \n 1 2 3
数字格式化转换
典型的的格式化方法为:
string.Format("{index[:format]}", number)
可使用“0”和“#”占位符进行补位。“0” 表示位数不够位数就补充“0”,小数部分如果位数多了则会四舍五入;“#”表示占位,用于辅助“0”进行补位。
标准格式化用法:
// “0”描述:占位符,如果可能,填充位
string.Format("{0:000000}",1234); // 结果:001234
// “#”描述:占位符,如果可能,填充位
string.Format("{0:######}",1234); // 结果:1234
string.Format("{0:#0####}",1234); // 结果:01234
string.Format("{0:0#0####}",1234); // 结果:0001234
// "."描述:小数点
string.Format("{0:000.000}", 1234); // 结果:1234.000
string.Format("{0:000.000}", 4321.12543); // 结果:4321.125
// ","描述:千分表示
string.Format("{0:0,0}", 1234567); //结果:1,234,567
// "%"描述:格式化为百分数
string.Format("{0:0%}",1234); // 结果:123400%
string.Format("{0:#%}", 1234.125); // 结果:123413%
string.Format("{0:0.00%}",1234); // 结果:123400.00%
string.Format("{0:#.00%}",1234.125); // 结果:123412.50%
内置快捷字母格式化用法:
// E-科学计数法表示
(25000).ToString("E"); // 结果:2.500000E+004
// C-货币表示,带有逗号分隔符,默认小数点后保留两位,四舍五入
(2.5).ToString("C"); // 结果:¥2.50
// D[length]-十进制数
(25).ToString("D5"); // 结果:00025
// F[precision]-浮点数,保留小数位数(四舍五入)
(25).ToString("F2"); // 结果:25.00
// G[digits]-常规,保留指定位数的有效数字,四舍五入
(2.52).ToString("G2"); // 结果:2.5
// N-带有逗号分隔符,默认小数点后保留两位,四舍五入
(2500000).ToString("N"); // 结果:2,500,000.00
// X-十六进制,非整型将产生格式异常
(255).ToString("X"); // 结果:FF
ToString
也可以自定义补零格式化:
(15).ToString("000"); // 结果:015
(15).ToString("value is 0"); // 结果:value is 15
(10.456).ToString("0.00"); // 结果:10.46
(10.456).ToString("00"); // 结果:10
(10.456).ToString("value is 0.0"); // 结果:value is 10.5
转换为二进制、八进制、十六进制输出:
int number = 15;
Convert.ToString(number, 2); // 结果:1111
Convert.ToString(number, 8); // 结果:17
Convert.ToString(number, 16); // 结果:f
自定义格式化器:
public class CustomFormat : IFormatProvider, ICustomFormatter
{
public string Format(string format, object arg, IFormatProvider formatProvider)
{
if (!this.Equals(formatProvider))
{
return null;
}
if (format == "Reverse")
{
return string.Join("", arg.ToString().Reverse());
}
return arg.ToString();
}
public object GetFormat(Type formatType)
{
return formatType == typeof(ICustomFormatter) ? this : null;
}
}
使用自定义格式化器:
String.Format(newCustomFormat(), "-> {0:Reverse} <-", "Hello World");
// 输出:-> dlroW olleH <-
字符串拼接
将数组中的字符串拼接成一个字符串:
var parts = new[] { "Foo", "Bar", "Fizz", "Buzz"};
var joined = string.Join(", ", parts);
// joined = "Foo, Bar, Fizz, Buzz"
以下四种方式都可以达到相同的字符串拼接的目的:
string first = "Hello";
string second = "World";
string foo = first + " " + second;
string foo = string.Concat(first, " ", second);
string foo = string.Format("{0} {1}", firstname, lastname);
string foo = $"{firstname} {lastname}";
字符串内插法
简单用法:
var name = "World";
var str =$"Hello, {name}!";
// str = "Hello, World!"
带日期格式化:
var date = DateTime.Now;
var str = $"Today is {date:yyyy-MM-dd}!";
补齐格式化(Padding):
var number = 42;
// 向左补齐
var str = $"The answer to life, the universe and everything is {number, 5}.";
// str = "The answer to life, the universe and everything is ___42." ('_'表示空格)
// 向右补齐
var str = $"The answer to life, the universe and everything is ${number, -5}.";
// str = "The answer to life, the universe and everything is 42___."
结合内置快捷字母格式化:
var amount = 2.5;
var str = $"It costs {amount:C}";
// str = "¥2.50"
var number = 42;
var str = $"The answer to life, the universe and everything is {number, 5:f1}.";
// str = "The answer to life, the universe and everything is ___42.1"
来源:https://www.cnblogs.com/willick/p/13035697.html
0
投稿
猜你喜欢
- 在SpringBoot中,当需要获取到配置文件数据时,除了可以用Spring自带的@Value注解外,SpringBoot提供了一种更加方便
- 当目标数据库不能直连的,需要一个服务器作为中间跳板的时候,我们需要通过SSH通道连接数据库。ps:使用ssh连接,相当于本地开了个端口去连接
- Spring Cache设置缓存条件原理从Spring3.1开始,Spring框架提供了对Cache的支持,提供了一个对缓存使用的抽象,通过
- 日常对于金额计算,应该都是用的BigDecimal,可是苦于没有好的工具类方法,现在贡献一个我正在用的对于数字计算的工具类,项目中就是用的这
- 本文研究的主要是Java ArrayList扩容问题实例详解的相关内容,具体介绍如下。首先我们需要知道ArrayList里面的实质的其实是一
- 1. 二叉树的顺序存储1.1 存储方式使用数组保存二叉树结构,方式即将二叉树用 层序遍历 方式放入数组中。一般只适合表示完全二叉树,这种方式
- 问题描述平常用的是java8,最近在学习java的新特性。这就需要从java8往更高的java版本切换。由于还在使用java8,测试完新特性
- 1、JDBCJDBC 就是 数据库开发 操作的 代名词,因为只要是现代商业项目的开发那么一定是离不开 数据库 的,不管你搞的是什么,只要是想
- 1.应用实例需求: 演示 Spring-Boot 通过表单注册用户,并支持上传图片2.代码实现代码实现-文件上传创建 templates/u
- Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的
- 本文实例讲述了C#启动进程的几种常用方法。分享给大家供大家参考。具体如下:1.启动子进程,不等待子进程结束private void simp
- Word是我们日常生活、学习和工作中必不可少的文档处理工具。精致美观的文档能给人带来阅读时视觉上的美感。在本篇文章中,将介绍如何使用组件Fr
- 近日工程中,逐渐感觉到原来复制粘贴代码的笨重,突然想起以前有人和我说起过Git和SVN之类的版本管理工具。由于平时主要是写Java代码,所以
- 简介mutable(可变)和immutable(不可变)对象是我们在java程序编写的过程中经常会使用到的。可变类型对象就是说,对象在创建之
- Java7 中 ConcurrentHashMapConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发
- 邮件绑定功能【需求】1、 用户注册时,输入邮箱2、 通过Javamail技术,向用户邮箱发送一封祝贺邮件1、javamail发送邮件1.1、
- 前言本文章主要从spring security安全认证登录内部调用流程来流程分析登录过程。一、登录时序图时序原图二、配置与代码1.引入库po
- ArrayList的构造方法(前置知识)可快速过一些基本成员变量:// 默认初始大小private static final int DEF
- 本文实例为大家分享了java实现抽奖功能的具体代码,供大家参考,具体内容如下抽一个:输入抽奖人数,生成随机数字进行抽奖。比如:楼主抽幸运儿送
- Lua是目前国内使用最多的热更语言,基于Lua的热更框架也非常多,最近学习了一下ToLua的热更框架,主要使用的问题在于C#和Lua之间的互