(8)C#字符串
一、字符串
为什么说string是一个不可变的字符序列。
string a="me";
a="meeeee";
string b="me"
给a赋值"me",然后重新赋值"meeeee"
当执行String a="me";时这段代码开辟了两块内存,一块在栈中存放a,然后另一块在堆中存放数据"me",a指向了me的地址,假设这个地址是A1。
然后执行a="meeeee";当个a重新赋值时,栈不会在开辟新空间,堆中会开辟新空间存放"meeeee"地址A2,此时a不在指向A1而是转向A2。
所以再输出a时它并不是修改了A1里的值而是重新建立了一个A2。
接着String b="me" 会新建一个栈空间b指向了原来存放me的地址A1。
变化下一重新分析遍
string a = "me";
string b = a;
Console.WriteLine(a);//me
Console.WriteLine(b);//me
a = "meeeee";//重新a赋值
Console.WriteLine(a);//meeeee
Console.WriteLine(b);//me
首先执行 string a = "me"; 和上边一样开辟了两块内存,一块在栈中存放a,然后另一块在堆中存放数据"me",a指向了me的地址,假设这个地址是A1。
然后 string b = a; 在栈中开辟了一个新空间存放b 然后b也指向了a的地址A1。
最后给a 重新赋值"meeeee"
a = "meeeee";这段代码,用原来的栈a,指向了一个新开辟的空间地址假设他叫A2,里面存放着数据"meeeee".这个栈a不再指向A1.现在指向A1的只有栈b。
String s和 new String 的区别
string s1="hello";
string s2= new String("hello");
String s1 = "hello"; 先在内存中找是不是有"hello" 这个对象,
如果有,就让s1指向那个"hello".如果内存里没有"hello",就创建一个新的对象保存"hello".
String s2=new String ("hello") 就是不管内存里是不是已经有"hello"这个对象,
都新建一个对象保存"hello".
刚刚发现两个问题
1、java里String里的S是大写的。而C#里有string和String大小写两种形式。
2、String s2=new String(""); 这句话在java里没有问题,但是在C#里会报错。
C#里String和srting的区别
1、 string是关键字,String是类
2、用C#编写代码的情况下尽量使用小写的string,比较符合规范,如果在追求效率的情况下可以使用大写的String,因为最终通过编译后,小写的string会变成大写的String,可以给编译减少负荷,从而运行效率提高。
"=="和equals的区别
==是比较两个字符串的引用地址是否相同,equals比较的是两者的值是否相同.
null 字符串和空字符串
null 字符串:没有分配内存;空字符串分配了内存,但内存里面没有数据.
string str=sting.empty; //分配了内存,相当于 string str=""; 写成后者比较容易出错, 多在里面加个空格string str=" "; 其他区别暂时不明,总之感觉用前者靠谱点
string str=null;//没分配内存
string.IsNullOrEmpty
当字符串是null或者sting.empty为null是返回真
string a = null;
string b = string.Empty;
string c = "";
string d = " "; if (string.IsNullOrEmpty(a))
{
Console.WriteLine("a字符串为真");//执行
}
if (string.IsNullOrEmpty(b))
{
Console.WriteLine("b字符串为真");//执行
}
if (string.IsNullOrEmpty(c))
{
Console.WriteLine("c字符串为真");//执行
}
if (string.IsNullOrEmpty(d))
{
Console.WriteLine("d字符串为真");//不执行
}
Console.ReadLine();
DBNull和null的区别:
??
StringBuilder类
待补
System.Text.Encoding.ASCII.GetString ???
Convert.ToBase64String 方法 图片转字节,字节转字符串
将 8 位无符号整数数组的值转换为其用 Base64 数字编码的等效字符串表示形式。
字符串前加@的意思
加@的意思是告诉系统,@后面的字符串当作正常的字符串解析就好,不用进行转义。如果不加,里面有些字符必须转义后才能正确识别。
例如
string str = "abc\de"; //系统报错
string str =@ "abc\de"; //正确
原样输出字符串
方法
String.Substring 方法
重载
Substring(Int32) 从此实例检索子字符串。 子字符串在指定的字符位置开始并一直到该字符串的末尾。
string s = "abcdefg";
string ss = s.Substring();//从字符串的第四位数开始往后截取
Console.WriteLine(ss);
Substring(Int32, Int32) 从此实例检索子字符串。 子字符串从指定的字符位置开始且具有指定的长度。
string s = "abcdefg";
string ss = s.Substring(,);
Console.WriteLine(ss);
第二个参数表示:从第四位开始,一共截取2个数
运算符重载
string str= "hello"; str += " world";
int转字符时定义输出格式
格式说明符 | 说明 | 示例 | 输出 |
C | 货币 | 2.5.ToString("C") | ¥2.50 |
D | 十进制数 | 25.ToString("D5") | 00025 |
E | 科学型 | 25000.ToString("E") | 2.500000E+005 |
F | 固定点 | 25.ToString("F2") | 25.00 |
G | 常规 | 2.5.ToString("G") | 2.5 |
N | 数字 | 2500000.ToString("N") | 2,500,000.00 |
X | 十六进制 | 255.ToString("X") | FF |
Environment.NewLine ??
字符串切割
1、用字符串分隔:
using System.Text.RegularExpressions;
string str="aaajsbbbjsccc";
string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);
foreach (string i in sArray) Response.Write(i.ToString() + "<br>");
输出结果:
aaa
bbb
ccc
2、用多个字符来分隔:
string str="aaajbbbscccjdddseee";
string[] sArray=str.Split(new char[]{'j','s'});
foreach(string i in sArray) Response.Write(i.ToString() + "<br>");
输出结果:
aaa
bbb
ccc
ddd
eee
3、用单个字符来分隔:
string str="aaajbbbjccc";
string[] sArray=str.Split('j');
foreach(string i in sArray) Response.Write(i.ToString() + "<br>")
输出结果
aaa
bbb
ccc
截取后四位
str.Substring(str.Length - , )
删除后四位
str.Substring(,str - )
去除字符串中的空格,回车,换行符,制表符
str.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "")
统计某字符出现的数量
string reg = @"(#)";//需要匹配的字串
MatchCollection con = new Regex(reg).Matches(“abg#fsdf#sadg”);
int i=con.count;
c#6.0开始可以简化string.Format的写法
public void p(string name)
{
Console.WriteLine(string.Format("Hello,{0}",name));
Console.WriteLine($("Hello,{name}"));//C#6.0
}
格式化字符串
string.Format("Today is {0:D}",DateTime.Now);
(8)C#字符串的更多相关文章
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率
之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...
- java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- JavaScript 字符串实用常操纪要
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Redis的简单动态字符串实现
Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,sds)的抽象类 ...
- ASP.NET加密和解密数据库连接字符串
大家知道,在应用程序中进行数据库操作需要连接字符串,而如果没有连接字符串,我们就无法在应用程序中完成检索数据,创建数据等一系列的数据库操作.当有人想要获取你程序中的数据库信息,他首先看到的可能会是We ...
- Javascript正则对象方法与字符串正则方法总结
正则对象 var reg = new Regexp('abc','gi') var reg = /abc/ig 正则方法 test方法(测试某个字符串是否匹配) var str = 'abc123'; ...
- 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)
转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...
- ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案
好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...
随机推荐
- 性能测试之siege
一.siege介绍 Siege是一个压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数 ...
- save?commit
数据库的隐式提交 先看一段SQL,最后一条SQL的输出你认为是什么? 1 2 3 4 5 6 7 SET AUTOCOMMIT = 1; BEGIN; INSERT INTO t1 VALUES (1 ...
- cocos2d安装
cocos2d引擎要求Python 2 为2.6 以上版本,Python 3 为3.3以上版本 cocos2d引擎安装支持pip安装,安装指令如下: pip install cocos2d
- Python网络编程(epoll内核监听,多任务多进程)
OJBK 接着昨天的说 select模块内的epoll函数还没说 说完epoll和本地套接字套接字基本就没了 今天主要是多进程 理论性东西比较多 主要是理解 epoll ...
- centos7系列问题
一.CentOS7.1查看ip route有两条路由规则 1.metric值是指到达目的地需要的跳数,是表达该条路由连接质量的指标.当有多条到达相同目的地的路由记录时,路由器会采用metric值小的那 ...
- HDU 4474 Yet Another Multiple Problem ( BFS + 同余剪枝 )
没什么巧办法,直接搜就行. 用余数作为每个节点的哈希值. #include <cstdio> #include <cstring> #include <cstdlib&g ...
- HDU 3874 Necklace 树状数组
题意:求区间内不同的数的和 离线处理,按查询右端点从小到大排序,从左往右扫一遍. 记录每个数出现的上一个位置,如果该数之前没有出现过,就加上,否则就在上一个位置减去. #include <cst ...
- CodeForces B. Creating the Contest
http://codeforces.com/contest/1029/problem/B You are given a problemset consisting of nn problems. T ...
- Tomcat源码浅析
最近在学习tomcat源码,算是把tomcat的整个流程梳理通了. 从上图来看,tomcat把模块化使用到了极致,配合组件生命周期的管理,让代码看起来结构清晰,而且很容易进行业务扩展. 1.上图的接口 ...
- 省选算法学习-BSGS与exBSGS与二次剩余
前置知识 扩展欧几里得,快速幂 都是很基础的东西 扩展欧几里得 说实话这个东西我学了好几遍都没有懂,最近终于搞明白,可以考场现推了,故放到这里来加深印象 翡蜀定理 方程$ax+by=gcd(a,b)$ ...