C# 字符串操作详解
1、字符串转字符数组
(1)、ToCharArray()方法,源码如下:
调用代码:
var str = "Hello World";
//将字符串转换成字符数组
var result = str.ToCharArray();
var enumerator = result.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
输出结果:
(2)、源码如下:
调用代码如下:
var str = "Hello World";
//将字符串转换成字符数组
var result = str.ToCharArray(,);
var enumerator = result.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
输出结果:
(3)、源码如下:
作用:清空字符串前后的空格
调用代码如下:
var str = " Hello World ";
//调用trim方法去除前后的空格
var result = str.Trim();
Console.WriteLine("str的原长度:{0},str调用Trim()方法之后的长度{1},结果字符串:{2}",str.Length,result.Length, "$"+ result + "$");
(4)、源码如下:
调用代码如下:
var str = " Hello World ";
//str调用trim方法的代码执行过程
//1、str处理开头的字母部分,str开头的首字母是空格,然后检索传入的参数是否有空格,有就清除开头所有的空格,并执行下一个字母的判断
//下一个字母如果传入的参数当中有则清除字符串中的改该字母(连续则清除所有连续的),没有就不在对字符串的开头进行操作
//注:整个过程以字符串为主,如果调用trim方法的字符串中的字符,在传入参数中没有,那么整个过程中段.
//2、str处理末尾的字母部分,str末尾的字母是空格,然后检索传入的参数是否有空格,有就清除末尾所有的空格,并执行下一个字母的判断,没有就不在对字符串的末尾进行操作
//下一个字母如果传入的参数当中有则清除字符串中的改该字母(连续则清除所有连续的),没有就不在对字符串的开头进行操作
//注:整个过程以字符串为主,如果调用trim方法的字符串中的字符,在传入参数中没有,那么整个过程中段.
var result = str.Trim(' ', 'd', 'H', 'r', 'e');
Console.WriteLine("str的原长度:{0},str调用Trim()方法之后的长度{1},结果字符串:{2}", str.Length, result.Length, "$" + result + "$");
Console.ReadKey();
(5)、源码如下:
var str = " Hello World ";
//1、str处理末尾的字母部分,str末尾的字母是空格,然后检索传入的参数是否有空格,有就清除末尾所有的空格,并执行下一个字母的判断,没有就不在对字符串的末尾进行操作
//下一个字母如果传入的参数当中有则清除字符串中的改该字母(连续则清除所有连续的),没有就不在对字符串的开头进行操作 //输出:"$ Hello Worl$"
var result = str.TrimEnd(' ', 'o', 'd', 'r', 'o');
//1、str处理末尾的字母部分,str末尾的字母是空格,然后检索传入的参数是否有空格,有就清除末尾所有的空格,并执行下一个字母的判断,没有就不在对字符串的末尾进行操作
//下一个字母如果传入的参数当中有则清除字符串中的改该字母(连续则清除所有连续的),没有就不在对字符串的开头进行操作
//输出:"$ Hello W$"
var result2 = str.TrimEnd(' ', 'd', 'l', 'r', 'o');
Console.WriteLine("$" + result + "$");
Console.WriteLine("$" + result2 + "$");
(6)、源码如下:
(5)的反例,处理字符串的开头.
(7)、源码如下:
参数:value-目标字符串 comparisonType-比较类型
作用:判断传入的字符串是不是当前字符串的开头,可设置比较类型(二进制比较、忽略语言文化比较、按当前线程的语言文化比较)
调用代码如下:
var str = "Hello World";
//判断str字符串是不是以"Hello"字符串开头,"Hello"字符串和"Hello World"字符串的比较方式位二进制比较,
//是速度最快的一种,但前提是字符串不能是展示给用户看的信息
//输出:True
var result = str.StartsWith("Hello",StringComparison.Ordinal);
//判断str字符串是不是以"Hello"字符串开头,"Hello"字符串和"Hello World"字符串的比较方式为采用当前线程设置的语言文化,并忽略大小写的比较方式
var result1 = str.StartsWith("Hello", StringComparison.CurrentCultureIgnoreCase);
Console.WriteLine(result+"...."+ result1);//输出:True....True
(8)、源码如下:
参数:value-目标字符串 ignorecase-是否忽略大小写 culture-语言文化
var str = "Hello World";
//判断str字符串是不是以"Hello"字符串开头,"Hello"字符串和"Hello World"字符串的比较方式为当前线程的语言文化为背景的情况下忽略大小写的方式
//输出:True
var result = str.StartsWith("Hello",true,Thread.CurrentThread.CurrentCulture); //判断str字符串是不是以"Hello"字符串开头,"Hello"字符串和"Hello World"字符串的比较方式为以中文(zh-CN代表中文0)为背景的情况下不忽略大小写的方式
//输出:True
var result1 = str.StartsWith("Hello", false, new System.Globalization.CultureInfo("zh-CN"));
Console.WriteLine(result+"...."+ result1);//输出:True....True
在介绍Split前,介绍一个枚举,设置Split处理后的字符串数组是否输出空字符串
public enum StringSplitOptions
{
//
// 摘要:
// 返回的值包括数组的元素,包含一个空字符串
None = ,
//
// 摘要:
// 返回值不包括包含空字符串的数组元素
RemoveEmptyEntries =
}
(9)、源码如下:
调用代码如下:
var str = "Hello World";
//Split不指定参数,默认按照空格对字符串进行分割
var result = str.Split();
//输出:Hello和World两个单词
var en = result.GetEnumerator();
while (en.MoveNext())
{
Console.WriteLine(en.Current);
}
Console.WriteLine("----------略微复杂的字符串分割-------------");
//先按空格对字符串进行分割,得到Hello和World两个字符串
//在按H对Hello和World进行分割得到空格和ello和World
//在按l对上面的三个字符串进行分割得到空格和e和空格和o和Wor和d
//在按r对上面的6个字符串进行分割得到空格和e和空格和o和Wo和空格和d
var result1 = str.Split(' ','H','l','r');
var en1 = result1.GetEnumerator();
while (en1.MoveNext())
{
Console.WriteLine(en1.Current);
}
注:如果该方法不给参数,默认按照空格进行分割.
(10)、
参数: separator一指定的分隔符 count一分割产生的子字符串的最大数量
调用代码如下:
string delimStr = " ,.:";
char[] delimiter = delimStr.ToCharArray();
string words = "one two,three:four.";
string[] result = default(string[]);
for (int i = ; i <=; i++)
{
result = words.Split(delimiter, i);
Console.WriteLine("根据指定的分隔符将一个字符串拆分成传入的最大数量的子字符串,当前传入的最大数量为:{0}", i);
foreach (var s in result)
{
Console.WriteLine(s);
}
}
Console.ReadKey();
(11)、
参数: separator一指定的分隔符 count一分割产生的子字符串的最大数量 options一是否要清除结果中的空字符串
调用代码:
var str = "Hello World";
var res = str.Split(new char[] { ' ', 'H' }, );
Console.WriteLine("-----------没有去空格的结果(传入了 StringSplitOptions.None或者不传这个参数(默认这个参数))------------");
foreach (var i in res)
{
Console.WriteLine(i);
} Console.WriteLine("-----------去空格的结果(StringSplitOptions.RemoveEmptyEntries)------------");
var result = str.Split(new char[]{' ','H'}, , StringSplitOptions.RemoveEmptyEntries);
var en = result.GetEnumerator();
while (en.MoveNext()) {
Console.WriteLine(en.Current);
}
Console.ReadKey();
(12)、
作用:根据传入的字符串数组进行分割,并选择性的清除结果集中的空字符串
var str = "Hello World";
var res = str.Split(new string[] { "o " }, StringSplitOptions.None);
Console.WriteLine("-----------没有去空格的结果(传入了 StringSplitOptions.None或者不传这个参数(默认这个参数))------------");
foreach (var i in res)
{
Console.WriteLine(i);
}
(13)、
作用:根据传入的字符串数组进行分割,并选择性的清除结果集中的空字符串,并指定分割产生的最大字符串数.
示例代码和(11)类似
(12)、
作用:连接一个字符串数组.传入一个继承了IEnumerable<string>称之为(可枚举字符串对象)
调用代码如下:
// List<string>继承自IEnumerable<string>
var list = new List<string>();
list.Add("");
list.Add("");
var result=String.Concat(list);
Console.WriteLine(result);
(13)、源码如下:
红框中的代码说明传入的必须是C#基元类型(包括string)的可枚举数组对象,如果是自定义类型,返回的就是类名的和.
作用:将一个基元类型的可枚举数组对象转换成字符串表现形式
var list = new List<double>();
list.Add(11.1);
list.Add(12.1);
var result= String.Concat<double>(list); var secondList = new List<bool>();
secondList.Add(true);
secondList.Add(false);
var secondResult = String.Concat<bool>(secondList);
Console.WriteLine(result+"...."+ secondResult);
(14)、源码如下:
观察源码发现,其实调用了IndexOf实例方法,并指定字符串的比较方式为二进制比较方式,为最快的比较方式.
作用:判断字符串中是否存在传入参数字符串.
调用代码:
var str = "大学专科";
var result = str.Contains("大专");
var result1 = str.Contains("大学");
Console.WriteLine(result);//输出:False
Console.WriteLine(result1);//输出:True
(15)、源码如下:
作用:复制一个字符串变量值到另一个字符串变量
调用代码如下:
var str = "abc";
var str1 = "xyz";
Console.WriteLine("------------下面通过Copy方法赋值--------------");
str1 = String.Copy(str);
Console.WriteLine("str 和 str1 {0} 同一个引用地址.",ReferenceEquals(str,str1)?"是": "不是");
Console.WriteLine("str的值和str1的值{0}相等.", string.Equals(str, str1, StringComparison.Ordinal) ? "" : "不");
Console.WriteLine();
Console.WriteLine("------------下面通过引用赋值--------------");
str1 = str;
Console.WriteLine("str 和 str1 {0} 同一个引用地址.", ReferenceEquals(str, str1) ? "是" : "不是");
Console.WriteLine("str的值和str1的值{0}相等.", string.Equals(str, str1, StringComparison.Ordinal) ? "" : "不");
(16)、
参数说明:
sourceIndex - 要复制的此实例中第一个字符的索引
destination - 此实例中的字符所复制到的 Unicode 字符数组
destinationIndex - destination 中的索引,在此处开始复制操作。
count - 此实例中要复制到 destination 的字符数。
调用代码如下:
string source = "xiaochao";
char[] destination = {'T','h','e',' ','a','a','a', 'a', 'a', 'a', 'a', 'a',' ','i','s',' ','m','v','p'};
//从source的索引为0的地方法开始,获取source中source长度个字符,将获取的字符从destination中索引为4的地方开始覆盖
source.CopyTo(, destination, , source.Length);
Console.WriteLine(destination);
source = "I think so!";
//从source的索引为0的地方法开始,获取source中source长度个字符,将获取的字符从destination中索引为4的地方开始覆盖
source.CopyTo(, destination, ,source.Length);
Console.WriteLine(destination);
(17)、
String.Format 方法的几种定义:
String.Format (String, Object) 将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项。
String.Format (String, Object[]) 将指定 String 中的格式项替换为指定数组中相应 Object 实例的值的文本等效项。
String.Format (IFormatProvider, String, Object[]) 将指定 String 中的格式项替换为指定数组中相应 Object 实例的值的文本等效项。指定的参数提供区域性特定的格式设置信息。
String.Format (String, Object, Object) 将指定的 String 中的格式项替换为两个指定的 Object 实例的值的文本等效项。
String.Format (String, Object, Object, Object) 将指定的 String 中的格式项替换为三个指定的 Object 实例的值的文本等效项。
常用的格式化数值结果表
字符 |
说明 |
示例 |
输出 |
C | 货币 | string.Format("{0:C3}", 2) | $2.000 |
D | 十进制 | string.Format("{0:D3}", 2) | 002 |
E | 科学计数法 | 1.20E+001 | 1.20E+001 |
G | 常规 | string.Format("{0:G}", 2) | 2 |
N | 用分号隔开的数字 | string.Format("{0:N}", 250000) | 250,000.00 |
X | 十六进制 | string.Format("{0:X000}", 12) | C |
string.Format("{0:000.000}", 12.2) | 012.200 |
常用的几种实例
1、字符串的数字格式
string str1 =string.Format("{0:N1}",); //result: 56,789.0
string str2 =string.Format("{0:N2}",); //result: 56,789.00
string str3 =string.Format("{0:N3}",); //result: 56,789.000
string str8 =string.Format("{0:F1}",); //result: 56789.0
string str9 =string.Format("{0:F2}",); //result: 56789.00
string str11 =( / 100.0).ToString("#.##"); //result: 567.89
string str12 =( / ).ToString("#.##"); //result: 567
2、格式化货币(跟系统的环境关,中文系统默认格式化人民币,英文系统格式化美元
string.Format("{0:C}",0.2)
结果为:¥0.20 (英文操作系统结果:$0.20)
默认格式化小数点后面保留两位小数,如果需要保留一位或者更多,可以指定位数
string.Format("{0:C1}",23.15)
结果为:¥23.2 (截取会自动四舍五入)
格式化多个Object实例
string.Format("市场价:{0:C},优惠价{1:C}",23.15,19.82)
3、格式化十进制的数字(格式化成固定的位数,位数不能少于未格式化前,只支持整形)
string.Format("{0:D3}",) //结果为:023
string.Format("{0:D2}",) //结果为:1223,(精度说明符指示结果字符串中所需的最少数字个数。)
4、用分号隔开的数字,并指定小数点后的位数
string.Format("{0:N}", ) //结果为:14,200.00 (默认为小数点后面两位)
string.Format("{0:N3}", 14200.2458) //结果为:14,200.246 (自动四舍五入)
5、格式化百分比
string.Format("{0:P}", 0.24583) //结果为:24.58% (默认保留百分的两位小数)
string.Format("{0:P1}", 0.24583) //结果为:24.6% (自动四舍五入)
6、零占位符和数字占位符
string.Format("{0:0000.00}", 12394.039) //结果为:12394.04
string.Format("{0:0000.00}", 194.039) //结果为:0194.04
string.Format("{0:###.##}", 12394.039) //结果为:12394.04
string.Format("{0:####.#}", 194.039) //结果为:194
下面的这段说明比较难理解,多测试一下实际的应用就可以明白了。
零占位符: 如果格式化的值在格式字符串中出现“0”的位置有一个数字,则此数字被复制到结果字符串中。小数点前最左边的“0”的位置和小数点后最右边的“0”的位置确定总在结果字符串中出现的数字范围。 “00”说明符使得值被舍入到小数点前最近的数字,其中零位总被舍去。
数字占位符: 如果格式化的值在格式字符串中出现“#”的位置有一个数字,则此数字被复制到结果字符串中。否则,结果字符串中的此位置不存储任何值。
请注意,如果“0”不是有效数字,此说明符永不显示“0”字符,即使“0”是字符串中唯一的数字。如果“0”是所显示的数字中的有效数字,则显示“0”字符。 “##”格式字符串使得值被舍入到小数点前最近的数字,其中零总被舍去。
7、日期格式化
string.Format("{0:d}",System.DateTime.Now) //结果为:2009-3-20 (月份位置不是03)
string.Format("{0:D}",System.DateTime.Now) //结果为:2009年3月20日
string.Format("{0:f}",System.DateTime.Now) //结果为:2009年3月20日 15:37
string.Format("{0:F}",System.DateTime.Now) //结果为:2009年3月20日 15:37:52
string.Format("{0:g}",System.DateTime.Now) //结果为:2009-3-20 15:38
string.Format("{0:G}",System.DateTime.Now) //结果为:2009-3-20 15:39:27
string.Format("{0:m}",System.DateTime.Now) //结果为:3月20日
string.Format("{0:t}",System.DateTime.Now) //结果为:15:41
string.Format("{0:T}",System.DateTime.Now) //结果为:15:41:50
18、
获取指定字符数组中的任意字符在此实例中第一个匹配项的从零开始的索引。
调用代码如下:
char[] chars = { 'a', 'e', 'i', 'o', 'u', 'y','A', 'E', 'I', 'O', 'U', 'Y' };
String s = "The long and winding road...";
Console.WriteLine("chars中的第一个字出现在s中的字符是:{0},出现的位置索引是:{1}",s[s.IndexOfAny(chars)], s.IndexOfAny(chars));
19、
向当前字符串实例的startIndex的位置,插入一段指定的字符串(value)
调用代码如下:
String original = "aaabbb";
Console.WriteLine("原字符串: '{0}'", original);
String modified = original.Insert(, " ");
Console.WriteLine("Insert修改后的字符串: '{0}'", modified);
20、
将指定的可枚举基元类型通过传入的分隔字符串进行连接.
调用代码如下:
//将List数组中的元素通过"$$"进行连接
var result=String.Join<int>("$$", new List<int>() { , , , , , });
Console.WriteLine(result);
21、
作用:向当前实例字符串的左边填充空格,以达到totalWidth长度的字符数,以实现右对齐的功能.
调用代码如下:
String str = "Hello World";
String result = str.PadLeft();
Console.WriteLine(result);
22、
作用:向当前实例字符串的左边填充指定字符(paddingChar),以达到(totalWidth)长度的字符数,以实现右对齐的功能.
调用代码如下:
String str = "Hello World";
String result = str.PadLeft(,'$');
Console.WriteLine(result);
注:PaddRight方法就不说了
23、
作用:移除当前字符串实例从startIndex索引开始的,count个字符
调用代码如下:
String str = "Hello World";
//移除空格之后的字符串,输出"Hello"
String result = str.Remove(str.IndexOf(' ', ));
Console.WriteLine(result);
24、
通过传入的分割符,对当前的字符串实例进行分割,返回字符串数组,可以指定最多返回的子字符串数量(通过count参数),可以过滤空子字符串(通过options参数)
调用代码如下:
String str = "1$ $2$3$4$ $5";
//根据"$"对str进行分割,最多返回10个子字符串,并且移除结果集空字符串
str.Split("$".ToCharArray(), , StringSplitOptions.RemoveEmptyEntries);
String str = "1$$2$3$4$$5";
//根据"$"对str进行分割,最多返回10个子字符串,并且移除结果集空字符串
var result=str.Split("$".ToCharArray(), , StringSplitOptions.RemoveEmptyEntries);
var en = result.GetEnumerator();
while (en.MoveNext())
{
Console.WriteLine(en.Current);
}
C# 字符串操作详解的更多相关文章
- shell字符串操作详解
shell字符串操作详解的相关资料. 1.shell变量声明的判断 表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DE ...
- Python字符串操作详解
菜鸟学Python第五天 流程控制 for循环 while循环 VS for循环: while循环:称之为条件循环,循环的次数取决于条件何时为false for循环:称之为迭代器循环,循环的次数取决于 ...
- linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 )
在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略 ...
- linux shell 字符串操作详解(获取长度、查找,替换)
在做shell批处理程序时候,常常会涉及到字符串相关操作.有许多命令语句,如:awk,sed都能够做字符串各种操作. 事实上shell内置一系列操作符号,能够达到相似效果,大家知道,使用内部操作符会省 ...
- Python操作redis字符串(String)详解 (三)
# -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host=") 1.SET 命令用于设置 ...
- Linux Shell数组常用操作详解
Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...
- Python 字符串方法详解
Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息. ...
- [Android新手区] SQLite 操作详解--SQL语法
该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法 :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解 ...
- MySQL 操作详解
MySQL 操作详解 一.实验简介 本节实验中学习并实践 MySQL 上创建数据库.创建表.查找信息等详细的语法及参数使用方法. 二.创建并使用数据库 1. 创建并选择数据库 使用SHOW语句找出服务 ...
随机推荐
- 知识点:CSS代码语法
css 样式由选择符和声明组成,而声明又由属性和值组成,如下图所示: 选择符:又称选择器,指明网页中要应用样式规则的元素,如本例中是网页中所有的段(p)的文字将变成蓝色,而其他的元素(如ol)不会受到 ...
- Video Processing and Communications:(视频处理和通信)
https://max.book118.com/html/2017/1010/136711526.shtm Application of (GAN) of AI faceswap in Music V ...
- spoj COT2(树上莫队)
模板.树上莫队的分块就是按dfn分,然后区间之间转移时注意一下就好.有个图方便理解http://blog.csdn.net/thy_asdf/article/details/47377709: #in ...
- kepware http接口 shell开发
读取某变量的值(wget wget --quiet \ --method GET \ --header 'Connection: keep-alive' \ --header 'Cache-Contr ...
- 《mysql必知必会》学习_sql文件导入数据库_20180724_欢
解决问题1:MySQL中导入sql文件. 步骤1:show databases;#看看我有什么数据库 步骤2:use hh;#我要用hh这个数据库,返回database changed说明打开成功. ...
- 种类并查集——带权并查集——POJ1182;HDU3038
POJ1182 HDU3038 这两个题比较像(一类题目),属于带权(种类)并查集 poj1182描绘得三种动物种类的关系,按照他一开始给你的关系,优化你的种类关系网络,最后看看再优化的过程中有几处矛 ...
- RxSwift学习笔记4:disposeBag/scheduler/AnyObserver/Binder
let disposeBg = DisposeBag() //直接在创建 //在 subscribe 方法中创建 let ofObserval = Observable.of("a" ...
- 论EFMS模拟量部分采集电路的修改
论1:电阻R11的作用 如图1是2014-3-11之前模拟量采集的部分硬件电路,图2是纠正后的正确电路. D5是SA20CA,TVS双向二极管,有效防止外接电源的浪涌冲击情况,保护电路. D6是稳压 ...
- FNDLOAD使用大全
FNDLOAD使用大全 Syntax FNDLOAD [username/password] 0 Y [mode] [configuration file] [target data file] ...
- CxGrid鼠标移到更改颜色
CxGrid鼠标移到更改颜色 设置表单中TcxGrid1DBTableView的Styles属性,设置Selection procedure TForm1.cxGrid1DBTableView1Mou ...