下面通過用c#的字符串和Hashtable類來實現一個簡體字轉繁體字的功能,然後分析一些c#的語法
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 簡體字轉繁體字
{
class Program
{
static void Main(string[] args)
{
string[] simpleStrs = File.ReadAllLines(@"E:\code\test\簡體字.txt",Encoding.Default);
string simpleStr = String.Join("", simpleStrs);
string[] complexStrs = File.ReadAllLines(@"E:\code\test\繁體字.txt",Encoding.Default);
string complexStr = String.Join("", complexStrs);
//Console.WriteLine(complexStr);
Hashtable transform=new Hashtable();
for (int i = 0; i < simpleStr.Length; i++)
{
transform.Add(simpleStr[i], complexStr[i]);
}
Console.WriteLine("請輸入一句話");
string originalStr = Console.ReadLine();
StringBuilder stb = new StringBuilder();
for (int i = 0; i < originalStr.Length; i++)
{
if (transform.Contains(originalStr[i]))
{
stb.Append(transform[originalStr[i]]);
}
else
{
stb.Append(originalStr[i]);
}
}
Console.WriteLine("轉化為繁體字為:");
Console.WriteLine(stb);
Console.ReadKey();
}
}
}
區別:
1. 值類型和引用類型在內存上存儲的地方不一樣
2. 傳遞值類型和引用類型的時候,傳遞的方式不一樣。
值類型:int、double、bool、struct、enum 等存儲在棧中。
引用類型:string、自定義類等,應用類型的值存在堆中,在棧中存的是堆中的地址。
4. 字符串的不可變性:指的是堆裡面的內容不可變,這種內容具有唯一性,所以如果你有很多個string都叫”abc”,實際上”abc”在,棧裡的內容可以變。
5. 即時窗口可以查看內存地址。
6. 如果是在想改變字符串中某個字符怎麼辦呢,首先將字符串轉換為char類型的數組,這個數組存在棧區,調用ToCharArray();返回char類型數組,然後改變,然後調用string(char [])這個構造函數再產生一個新String;
7. 我們大量對字符串進行拼接賦值操作時,內存中會產生大量的垃圾,這是我們需要StringBuilder,
繼承構造函數 在子類構造函數的函數列表裡只能寫:base(,,)不能寫:父類名(,,,)
當子類隱藏父類的成員方法,可以在返回類型前加關鍵字new 來隱藏從父類哪裡繼承來的成員,隱藏的後果是子類調用不到父類的成員;
就是子類對象可以賦值給父類引用(隱式轉換),如果父類引用指向的是子類對象,可以把父類強行轉換為子類(顯式轉換),當然用is或as可以判斷是不是那種對象;
is : 判斷類型,如果是的那就返回true 否則返回false;需測試沒有關系的類之間的情況;
as: 進行強轉,如果成功就返回轉換得到的那個對象,失敗就返回null;
是一個集合:我們主要用泛型類型,這個類型不怎麼用了 Array 類型一定,然後長度可變;
表示添加單個數據,其實都是引用無所謂的啦。很多數據的一個集合,相對於數組有兩大好處;類型可以不一樣,長度可變。
有個Count屬性和別的對象的Length屬性是一樣的。
size() Capacity屬性表示已分配的容量 剛開始為4,然後每次擴大一倍。
是鍵值對集合;(table開頭小寫哦)
在鍵值對集合中,是根據鍵找值的,用鍵做下標; 用foreach循環來遍歷鍵值對集合,;
hashtable裡面有兩個重要的屬性一個是Keys是鍵的集合,一個是Values是值的集合。鍵只能出現一次,值可以出現很多次;
ContainsValue
添加鍵值對的時候可以使用Add,也可以使用ht[鍵]=值(調用insert); 可以使用Contains和ContainsKey來判斷是否包含某個鍵,用ContainsValue判斷是否包含某個值;
foreach的效率比for要低一點;
c#是一門強類型語言,在代碼當中必須對每一個變量的類型有一個明確的定義;
var用於弱類型中,var根據值能夠推斷出來類型,object有個GetType可以獲取這個對象的類型。隱式類型的局部變量必須初始化,var一般用在foreach裡面
是靜態類
在System.IO裡面,
string [] contents=File.ReadAllLines(path,Encoding.Default);
Directory.GetFiles(path,”*.txt”);//第二個選項是正則表達式匹配;這個是Directory類的靜態方法;這個返回的是帶目錄名的文件名
DirectoryInfo類的對象有一個GetFiles和EnumerateFiles的方法也可以,返回的是不帶目錄名的文件名;
DirectoryInfo類有另外的實例方法GetDirectory和EnumerateDirectory()可以獲取子文件夾的信息;
是靜態類