书写的时候需注意:[ ] 不要忘记写。{ } 不要忘记写。
# 1. 初始化
1. 直接赋值
`string str = "你好";`
2. 或用构造函数:
public string {char[] value}
例如:
```
char[] arr = {'t', 'i', 'm', 'e'};
string a = new string(arr);
```
3. 提取
> 返回值为字符串类型string
public string(char[] value, int offset, int count)
offset表示起始位置,count表示获取个数。
```
char[] arr = {'时', '间', '就', '是', '金', '钱'};
string a = new string (arr, 4, 2); // new不能省,string也不能省。
```
结果为“金钱”两字。
![](https://ws4.sinaimg.cn/large/006tKfTcly1fral3sy46xj30ic06i0te.jpg)
![](https://ws4.sinaimg.cn/large/006tKfTcly1fral4v8v1vj301x022q2s.jpg)
获取指定位置的字符:
```
string str = "we are the world";
char chr = str[5]; //这里用的是单个字符的类型char
```
4. 查找子字符串的索引位置
> 返回值为int 类型。获取索引,获取的是第几个位置,所以结果一定是int型。
```
public int IndexOf(string value) //获取第一次出现的索引
public int IndexOf(stirng value, int startindex); //从指定位置往后查
public int IndexOf(string value, int startindex, int count) //从指定位置往后检查几个字符
```
> 上述方法是从前往后,如果要从后往前,则使用LastIndexOf
```
string str = "we are the world";
int index = str.indexOf("e");
```
```
string str = "we are the world";
int index = str.IndexOf("e", 3);
```
```
string str = "we are the world";
int index = str.IndexOf("e", 3, 5); //
```
**如果不存在该数字,则返回的位置值为-1。**
# 2. 判断字符串结尾-后缀名
> 返回值为bool值,true false。
1. 一般语法
```
string str = "Program.cs";
bool b = str.EndsWith(".cs");
console.writeline(b);
```
会输出true,则表示是以这个后缀结尾,如果不是,则返回false。
2. 如果不想区分大小写:
public bool EndsWith(string value, bool ignoreCase, CultureInfo culture)
endswith后面可以跟三个参数,第一个参数就是value值,第二个参数就是是否忽略大小写(true 为忽略,false为不忽略),第三个参数一般null就行:
```
string str = "Program.cs";
bool b2 = str.EndsWith(".cs", true, null);
```
![](https://ws4.sinaimg.cn/large/006tNc79gy1frcuw3pvr6j30gs08maaq.jpg)
# 3. 判断字符串开头
StartWith
# 4. 字符串拼接
符号:+, +=
```
static void Main()
{
Console.WriteLine("please enter your name");
string str = Console.ReadLine();
Console.WriteLine(str + ", hello");
Console.ReadLine();
}
```
![](https://ws2.sinaimg.cn/large/006tNc79gy1frcv1909qzj30g30823z5.jpg)
直接用+=
![](https://ws2.sinaimg.cn/large/006tNc79gy1frcv3epg6bj30cw06g3yu.jpg)
# 5. 比较
1. 用== 符号
如,要比较登录时输入的用户名string name 与数据库中存在的用户名dbname, 可直接判断 name == dbname 是否成立。
2. compare方法——返回int值
> 需要static,因为是直接调用string 下面的compare方法
```
string m1 = "mj";
string m2 = "mjk";
console.writeline(string.compare(m1, m2)); //此处直接写string.compare,直接调用string字符串这个类 下面的compare 方法。
```
如果返回为0,则表示m1==m2,如果返回1,则表示m1>m2,返回-1则表示m1<m2。
`console.writeline(string.compare(m1, m2, true));`
则忽略大小写。
3. compareTo方法——返回int值
> 不需要static,因为compareTo为对象比较。
`console.writeline(m1.CompareTo(m2)); //直接用对象名后面加点就可以调用方法`
4. ✨Equals方法——返回bool值,一般开发中较常用
`public bool Equals (string value);`
![](https://ws4.sinaimg.cn/large/006tKfTcgy1frdlv8x0g6j30bq060gm0.jpg)
`public static bool Equals (string a, string b);`
![](https://ws3.sinaimg.cn/large/006tKfTcgy1frdlwjlxzaj30bi066q3c.jpg)
# 6. 大小写——用于网页输入验证码
```
public string TpUpper();
public string ToLower();
```
```
string str = "Good good study, day day Up.";
string sUp = str.ToUpper();
string sLo = str.ToLower();
```
![](https://ws1.sinaimg.cn/large/006tKfTcgy1frdm3ypgc1j30c506qdgd.jpg)
# 7. 格式化
如数值、日期、货币、百分比之类。用 `static string.Format` 方法。
可以使用占位符。
![](https://box.kancloud.cn/53f3692702e5d3459367574631d5755f_613x276.png)
## 数值格式显示
```
console.writeline(string.Format("金额显示: {0:c}", 368)); //注意冒号的位置,0表示占位符,占位符后面接的才是格式化的类型。
```
占位符{0}后面要冒号,然后再写入要格式化的代码,比如 c金额格式
![](https://box.kancloud.cn/c25d918318bb7e773c115e0bdbee50f3_471x151.png)
![](https://box.kancloud.cn/9a6d18ed6b285d9d2a6f84da87aaab7e_143x80.png)
c表示保留两位小数,{0:c0}则表示整数。
![](https://ws4.sinaimg.cn/large/006tKfTcly1frdmj87e9bj30gy080my4.jpg)
```
console.writeline(string.Format("pi的值: {0:F2}", Math.PI)); //输出pi 的值
```
![](https://box.kancloud.cn/c3cf00d2740c67d78095efef582ddf81_705x205.png)
## 日期格式显示
![](https://ws4.sinaimg.cn/large/006tKfTcgy1frgl8hez5zj30mv0aj0ue.jpg)
> 注意:记得写string.Format() !
> 记得占位符后面是冒号:
## 用 toString 的方法
```
DateTime day1 = DateTime.Now;
console.writeline(day1.toString("Y"));
```
也是可以的。
# 8、截取字符串
string.substring
比如截取文件名,或截取后缀
```
string fileName = "Program.cs";
string s1 = fileName.Substring(0, fileName.indexOf("."));//0的意思是从第0号位置开始截取,一直到出现“.”的时候结束。
console.writeline(s1);
```
如果要从"."开始,则可以这么写:
```
string fileName = "Program.cs";
string s2 = fileName.Substring(fileName.indexOf("."));
console.writeline(s2);
console.readline();
```
![](https://ws1.sinaimg.cn/large/006tKfTcgy1frgsnvjneij30dx04hweu.jpg)
# 9、分割字符串
例如excel里面的分列。用split方法。
> 返回结果是字符数组。
```
string str = "abc, def, ghi";
string[] a1 = str.split(new char[ ] {'.'}); //意思是,用字符'.'来进行分割。如果有其他符号,也可以继续在 char 里面写。
```
![](https://ws3.sinaimg.cn/large/006tKfTcgy1frgtnptvpaj30c500tgll.jpg)
例如:
```
console.writeline("please enter your num:");
string str = console.readline(); //让用户自行输入一个带符号“.”的数据
string [] a1 = strName.split(new char []{'.'}); //通过'.'这个字符,来对用户输入的数进行分割。注意这里用的是char ,所以要单引号。
foreach(string a in a1)
{
console.write(a + " ");//a 只是我们随意定义的一个变量名,用来表示字符串数组内的值。用foreach方法遍历数组,再输出
}
console.readline();
```
输入192.168.0.2 得出的结果就是 192 168 0 1 中间有空格。
![](https://ws4.sinaimg.cn/large/006tKfTcgy1frgtdt06ubj30d907i0tg.jpg)
**指定分割次数:**
```
string str = "abc, def, ghi";
string a2 = str.splite(new char[ ] {"."}, 2); //会变成下图右边的形式。
```
![](https://ws1.sinaimg.cn/large/006tKfTcgy1frgsz8g946j30i009it9i.jpg)
## 此处可以制造死循环,让用户不断输入
只要在代码的最前面加上下面for语句,即可实现。
```
for (; ;)
{
}
```
[本书中关于死循环的笔记](https://ihavenolimitations.xyz/amy326/c/627058)
![](https://ws1.sinaimg.cn/large/006tKfTcgy1frgtr0jrbsj30ee0b1q40.jpg)
## 删除空格
`string.Trim()`
```
string str = " abc ";
console.writeline(str.Trim());
```
或删除指定字符
```
string str = "777777abc@@@";
char[] ch = {'7', '@'};
console.writeline(str.Trim(ch));
```
# 10、字符串替换
Replace。替换单个字符用的是单引号。替换多个字符用的是双引号。
## 替换单个字符
```
string str = "77777abc7777";
string rp = str.Replace('7', '8');
console.writeline(rp);
```
输出:88888abc888
## 替换多个字符
```
string str = "77777abc777";
string rp2 = str.Replace("ab", "de");
console.writeline(rp2);
```
# 11、可变字符串
`stringBuilder`
[具体语法](https://docs.microsoft.com/zh-cn/dotnet/api/system.text.stringbuilder.-ctor?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev15.query%3FappId%3DDev15IDEF1%26l%3DZH-CN%26k%3Dk(System.Text.StringBuilder.%2523ctor)%3Bk(TargetFrameworkMoniker-.NETFramework%2CVersion%3Dv4.6.1)%3Bk(DevLang-csharp)%26rd%3Dtrue&view=netframework-4.7.2#System_Text_StringBuilder__ctor_System_String_)
注意,这个方法是在system.text命名空间里面的,所以我们在调用的时候,需要把这个命名空间加到最前面。
![](https://ws1.sinaimg.cn/large/006tKfTcgy1frhnqbfcu4j30d902qwem.jpg)
`string.Builder`
一般情况下,如果定义了一个 str 变量,再操作时,str 的值会变成最新的,无法回到最初。例如:
```
string str = "abc";
str += 'd'; // => 得到str = abcd
str += 123; // => 得到 str = abcd123
```
但有时候我们希望对 str 进行的操作是能回到最初状态来再一次操作。这时候需要用到可变字符串。
相关方法有:append; appendFormat; Insert; Remove; Replace等。
![](https://box.kancloud.cn/7aab17a1d009d3be9419087af29eb325_714x207.png)
![](https://box.kancloud.cn/c986a3a89e397dba4b0e0cdd773ab029_694x233.png)
如果用了stringbuilder,就不能像上述一样str += "def"了。而是要用相关的方法来定义。
```
stringBuilder str = new stringBuilder ("hello");
console.writeline(str.Append(" amy"));
console.readline();
```
[参考](https://blog.csdn.net/qq541005640/article/details/77062849)
![](https://ws1.sinaimg.cn/large/006tKfTcly1frho7em2nqj30gj07faam.jpg)
- 帮助文档 microsoft helo viewer
- c#开发环境及visual studio安装注意事项
- c#程序基本结构-基本语法
- Q1: public static void main(String[] args) 是什么意思
- Q2: c#命名空间+Main方法
- Q3:注释+命名规则+代码规则
- Q4: c#语句 system => console
- Q5: 数据类型 .net
- Q5: 常用名字、变量、运算符
- Q6: 对话窗输入-属性
- Q7: 递归
- Q8:决策分支、条件判断语句 if 语句
- Q9:数组
- Q10:字符串
- Q11:对象、类、访问权限、静态动态函数
- Q12:方法及参数——继承于类
- Q13:构造函数
- Q14:继承——base 关键字
- Q15:多态、虚方法、接口
- Q16:创建窗体应用、控件
- Q17:Ado数据访问、连接 sqlserver 数据库
- Q18: 读取数据command + DataRead( )、DataSet + DateAdapter
- Q19: Entity Framwork、entity 与 ADO.net的区别
- Q20: 对话框、文件、文件夹
- Q21: 导入excel数据、更新到 dbo 数据库中
- Q26: 获取 excel 中每个 sheet 的表名
- Q22: 两个窗体之间数据+方法传递
- Q23: 数学对象
- Q24: c#网站编写
- Q25: visual studio2017如何查看帮助
- Q27: c# dictionary 字典对象
- Q28: 数组与dataTable互相转化