書寫的時候需注意:[ ] 不要忘記寫。{ } 不要忘記寫。
# 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也不能省。
```
結果為“金錢”兩字。


獲取指定位置的字符:
```
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);
```

# 3. 判斷字符串開頭
StartWith
# 4. 字符串拼接
符號:+, +=
```
static void Main()
{
Console.WriteLine("please enter your name");
string str = Console.ReadLine();
Console.WriteLine(str + ", hello");
Console.ReadLine();
}
```

直接用+=

# 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);`

`public static bool Equals (string a, string b);`

# 6. 大小寫——用于網頁輸入驗證碼
```
public string TpUpper();
public string ToLower();
```
```
string str = "Good good study, day day Up.";
string sUp = str.ToUpper();
string sLo = str.ToLower();
```

# 7. 格式化
如數值、日期、貨幣、百分比之類。用 `static string.Format` 方法。
可以使用占位符。

## 數值格式顯示
```
console.writeline(string.Format("金額顯示: {0:c}", 368)); //注意冒號的位置,0表示占位符,占位符后面接的才是格式化的類型。
```
占位符{0}后面要冒號,然后再寫入要格式化的代碼,比如 c金額格式


c表示保留兩位小數,{0:c0}則表示整數。

```
console.writeline(string.Format("pi的值: {0:F2}", Math.PI)); //輸出pi 的值
```

## 日期格式顯示

> 注意:記得寫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();
```

# 9、分割字符串
例如excel里面的分列。用split方法。
> 返回結果是字符數組。
```
string str = "abc, def, ghi";
string[] a1 = str.split(new char[ ] {'.'}); //意思是,用字符'.'來進行分割。如果有其他符號,也可以繼續在 char 里面寫。
```

例如:
```
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 中間有空格。

**指定分割次數:**
```
string str = "abc, def, ghi";
string a2 = str.splite(new char[ ] {"."}, 2); //會變成下圖右邊的形式。
```

## 此處可以制造死循環,讓用戶不斷輸入
只要在代碼的最前面加上下面for語句,即可實現。
```
for (; ;)
{
}
```
[本書中關于死循環的筆記](http://www.hmoore.net/amy326/c/627058)

## 刪除空格
`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命名空間里面的,所以我們在調用的時候,需要把這個命名空間加到最前面。

`string.Builder`
一般情況下,如果定義了一個 str 變量,再操作時,str 的值會變成最新的,無法回到最初。例如:
```
string str = "abc";
str += 'd'; // => 得到str = abcd
str += 123; // => 得到 str = abcd123
```
但有時候我們希望對 str 進行的操作是能回到最初狀態來再一次操作。這時候需要用到可變字符串。
相關方法有:append; appendFormat; Insert; Remove; Replace等。


如果用了stringbuilder,就不能像上述一樣str += "def"了。而是要用相關的方法來定義。
```
stringBuilder str = new stringBuilder ("hello");
console.writeline(str.Append(" amy"));
console.readline();
```
[參考](https://blog.csdn.net/qq541005640/article/details/77062849)

- 幫助文檔 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互相轉化