一、字符串

为什么说string是一个不可变的字符序列。

  1. string a="me";
  2. a="meeeee";
  3. 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。

变化下一重新分析遍

  1. string a = "me";
  2. string b = a;
  3. Console.WriteLine(a);//me
  4. Console.WriteLine(b);//me
  5. a = "meeeee";//重新a赋值
  6. Console.WriteLine(a);//meeeee
  7. 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 的区别

  1. string s1="hello";
  2. 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是返回真

  1.        string a = null;
  2. string b = string.Empty;
  3. string c = "";
  4. string d = " ";
  5.  
  6. if (string.IsNullOrEmpty(a))
  7. {
  8. Console.WriteLine("a字符串为真");//执行
  9. }
  10. if (string.IsNullOrEmpty(b))
  11. {
  12. Console.WriteLine("b字符串为真");//执行
  13. }
  14. if (string.IsNullOrEmpty(c))
  15. {
  16. Console.WriteLine("c字符串为真");//执行
  17. }
  18. if (string.IsNullOrEmpty(d))
  19. {
  20. Console.WriteLine("d字符串为真");//不执行
  21. }
  22. Console.ReadLine();

DBNull和null的区别:

??

StringBuilder类

待补

System.Text.Encoding.ASCII.GetString ???

Convert.ToBase64String 方法  图片转字节,字节转字符串

将 8 位无符号整数数组的值转换为其用 Base64 数字编码的等效字符串表示形式。

字符串前加@的意思

加@的意思是告诉系统,@后面的字符串当作正常的字符串解析就好,不用进行转义。如果不加,里面有些字符必须转义后才能正确识别。
例如

  1. string str = "abc\de"; //系统报错

  1. string str =@ "abc\de"; //正确

原样输出字符串

 方法

String.Substring 方法

重载

Substring(Int32)   从此实例检索子字符串。 子字符串在指定的字符位置开始并一直到该字符串的末尾。

  1. string s = "abcdefg";
  2. string ss = s.Substring();//从字符串的第四位数开始往后截取
  3. Console.WriteLine(ss);

Substring(Int32, Int32)  从此实例检索子字符串。 子字符串从指定的字符位置开始且具有指定的长度。

  1. string s = "abcdefg";
  2. string ss = s.Substring(,);
  3. Console.WriteLine(ss);

第二个参数表示:从第四位开始,一共截取2个数

运算符重载

  1. string str= "hello";
  2.  
  3. 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、用字符串分隔:

  1. using System.Text.RegularExpressions;
  2. string str="aaajsbbbjsccc";
  3. string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);
  4. foreach (string i in sArray) Response.Write(i.ToString() + "<br>");

输出结果:

aaa
bbb
ccc

2、用多个字符来分隔:

  1. string str="aaajbbbscccjdddseee";
  2. string[] sArray=str.Split(new char[]{'j','s'});
  3. foreach(string i in sArray) Response.Write(i.ToString() + "<br>");

输出结果:
aaa
bbb
ccc
ddd
eee
 
3、用单个字符来分隔:

  1. string str="aaajbbbjccc";
  2. string[] sArray=str.Split('j');
  3. foreach(string i in sArray) Response.Write(i.ToString() + "<br>")

输出结果
aaa

bbb

ccc

截取后四位

  1. str.Substring(str.Length - , )

删除后四位

  1. str.Substring(,str - )

去除字符串中的空格,回车,换行符,制表符

  1. str.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "")

统计某字符出现的数量

  1. string reg = @"(#)";//需要匹配的字串
  2. MatchCollection con = new Regex(reg).Matches(“abg#fsdf#sadg”);
    int i=con.count;

c#6.0开始可以简化string.Format的写法

  1. public void p(string name)
  2. {
  3. Console.WriteLine(string.Format("Hello,{0}",name));
  4. Console.WriteLine($("Hello,{name}"));//C#6.0
  5. }

格式化字符串

  1.  
  1. string.Format("Today is {0:D}",DateTime.Now);
  1.  
  1.  

(8)C#字符串的更多相关文章

  1. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  2. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

  3. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

  4. JavaScript 字符串实用常操纪要

    JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...

  5. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  6. Redis的简单动态字符串实现

    Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,sds)的抽象类 ...

  7. ASP.NET加密和解密数据库连接字符串

    大家知道,在应用程序中进行数据库操作需要连接字符串,而如果没有连接字符串,我们就无法在应用程序中完成检索数据,创建数据等一系列的数据库操作.当有人想要获取你程序中的数据库信息,他首先看到的可能会是We ...

  8. Javascript正则对象方法与字符串正则方法总结

    正则对象 var reg = new Regexp('abc','gi') var reg = /abc/ig 正则方法 test方法(测试某个字符串是否匹配) var str = 'abc123'; ...

  9. 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)

    转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...

  10. ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案

    好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...

随机推荐

  1. PJSIP-PJMEDIA【使用pjmedia 播放wav格式的音乐】

    应宝哥建议以及更好的交流学习,这篇开始使用中文,英语就先放一放吧! 要使用PJSIP中的PJMEDIA首先我们需要搭建好它所需要的环境. [环境搭建与调试] 1 在 工具 加入pjmedia所需要的包 ...

  2. 剑指Offer - 九度1389 - 变态跳台阶

    剑指Offer - 九度1389 - 变态跳台阶2013-11-24 04:20 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳 ...

  3. 嵌入式(Embedded System)笔记 —— Cortex-M3 Introduction and Basics(上)

    随着课内的学习,我想把每节课所学记录下来,以作查阅.以饲读者.由于我所上的是英文班课程,因此我将把关键术语的英文给出,甚至有些内容直接使用英文. 本次所介绍内容是关于Cortex-M3的基础内容. - ...

  4. 【Java】Java JDK 安装及环境配置

    安装包下载: Java Platform (JDK) 11 https://www.oracle.com/technetwork/java/javase/downloads/index.html 安装 ...

  5. Python全栈工程师(文件操作、编码)

    ParisGabriel                每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰     Python人工智能从入门到精通 最近简直要死了 发烧感冒 喉咙痛..... ...

  6. 不作伪分享者决定完整分享我自学Python3的全部过程细节

    不作伪分享者决定完整分享我自学Python3的全部过程细节   我不要作伪分享者 十六年前我第一次见到了电脑,并深深地爱上了它: 十二年前我第一次连上了网络,并紧紧地被它爱上. 十年前的网络是田园美景 ...

  7. 线段树(单点更新,区间查询) HDU 1754 I Hate It

    题目链接 线段树的模板 #include<iostream> #include<cstdio> #include<cmath> #include<algori ...

  8. 博客挪窝了 http://my.oschina.net/jrrx/blog

    1. 博客园很不错: 2. 由于各种原因,挪到了 http://my.oschina.net/jrrx/blog

  9. CentOS6.5下搭建LAMP环境(源码编译方式)

    CentOS 6.5安装配置LAMP服务器(Apache+PHP5+MySQL) 学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP ,WAMP,MAMP等.这里我介 ...

  10. PHP面向对象 封装与继承

    知识点: PHP封装三个关键词: 一.public 公有的,被public修饰的属性和方法,对象可以任意访问和调用 二.private 私有的,被private修饰的属性和方法,只能在类内部的方法可以 ...