菜鳥的C#學習之旅——字串十種常用方法
阿新 • • 發佈:2018-12-27
目錄
五、string str =null 與 string str = "" 區別:
一、字串的不變性
1.字串的不可變性:字串一旦宣告就不再可以改變,所以只能通過索引來讀取指定位置的char,不能對字串位置的char進行修改。
2.我們對字串進行處理,是真的改掉了字串裡面的字嗎???不是。而是隻改變的陣列某個值而已。原來的字串在記憶體中還是存在,只有等到程式結束的時候才能消失,如果這樣的字串在記憶體中多了就會溢位,而且字串還是比較佔用記憶體的。這裡也體現了字串的不可變性。
3.要區分變數名和變數指向的值的區別,程式中可以有很多的字串,然後有字串變數指向他們,變數可以指向其他的字串,但是字串本身沒有變化,字串不可變性指的記憶體中的字串不可變,而不是變數不變
4.舉例(程式碼展示)
static void Main(string[] args) { //字串的處理 string text = "哈哈,我今天真的很帥哦!";//字串 Console.WriteLine(text .Length );//顯示字串裡面的個數 text.ToCharArray();//變成了一個char的陣列 char[] chs = text.ToCharArray();//定義一個char陣列來接收 chs[10]='美'; text = new string(chs);//重新賦值的一個過程 Console.WriteLine(text ); Console.ReadKey(); }
二、過載
1.只讀屬性:這裡只能讀而不能賦值,但是我此時此刻就想給他賦值。那麼此時就要用到構造方法了。
2.賦值的構造方法,如果我們在這裡的類當中不寫建構函式,這個類當中原本就有一個構造方法,但是他是沒引數的構造方法;但是此刻我們寫了一個有引數的建構函式,此時的類當中也只有一個構造方法,就是我們寫的這個有引數的構造方法,原來的無引數的建構函式被幹掉了,但是如果此時此刻我還想使用一個無引數的建構函式,我們就必須在寫一個無引數的建構函式3.舉例(程式碼展示)
public class Person//建立一個類 { string _name;//欄位 public string Name//屬性 { get { return _name; }//只讀屬性:這裡只能讀而不能賦值,但是我此時此刻就想給他賦值。那麼此時就要用到構造方法了。 } //構造方法: public Person(string name) { this._name = name; } public Person()//無引數的構造方法 { } }
三、字串長度的獲取
//隨機輸入你心中想到的一個名字,
//然後輸出他的字串長度 Length:可以得字串的長度
Console.WriteLine("輸入你心目中想到的名字:");
string name = Console.ReadLine();
Console.WriteLine(name .Length );
Console.ReadKey();
四、大小寫轉換及不區分大小寫
//兩個學員輸入各自最喜歡的課程名稱
//判斷是否一致,如果相等,則輸出你們兩個喜歡相同的課程
//如果不同,則輸出你們兩個喜歡不同的課程
Console.WriteLine("輸入第一門課程:");
string str1 = Console.ReadLine();
Console.WriteLine("輸入第二門課程:");
str1 = str1.ToLower();//把字串轉換成小寫的
str1 = str1.ToUpper();//把字串轉換成大寫的
string str2 = Console.ReadLine();
str2 = str2.ToLower();
str2 = str2.ToUpper();
忽略大小寫的比較,返回的是bool型別的
bool result = str1.Equals(str2, StringComparison.OrdinalIgnoreCase);
if (true)
{
Console.WriteLine("課程相同");
}
else
{
Console.WriteLine("課程不同");
}
if (str1 ==str2 )
{
Console.WriteLine("課程一樣",str1 );
}
else
{
Console.WriteLine("課程不同{0}------{1}",str1,str2 );
}//這裡也會有問題:英語的大小寫不同,就會有問題啦
//解決辦法就是將字串轉換成統一的小寫的
//當然也可以將所有的字串轉化成大寫的
//Console.ReadKey();
五、string str =null 與 string str = "" 區別:
string str=null是不給他分配記憶體空間,而string str=""給它分配長度為空字串的記憶體空間,string str=null沒有string物件,string str=""有一個字串物件。
六、除空格
1.第一種方法:
string str = "哈 哈 , 我 ---- 又 變 帥 了";
//像這種有很多沒有用的空格,想要去除掉的方法如下:
char []chs=new char [] {' ','-'};//陣列
string [] result= str .Split (chs,StringSplitOptions .RemoveEmptyEntries );//定義一個字串型別的陣列來接收
//第二引數,已經把不想要的都切掉了,
for (int i = 0; i < result .Length ; i++)
{
Console.Write(result[i]);
}
Console.ReadKey();
2.第二種方法:
//從前物件移除陣列中指定的一組字元的所有錢導匹配項和尾部匹配項
Console.WriteLine("請輸入您的賬號:");
string name = Console.ReadLine();
name = name.Trim();//移除前後空格的
name = name.TrimEnd();//移除後面的空格
name = name.TrimStart();//移除前面的空格
Console.WriteLine(name);
Console.ReadKey();
七、去除多餘不想要的字元
//去掉多餘的不想要的字元
string date = "2012---------11---------11";
char[] chs = new char[] { '-' };
string[] time = date.Split(chs, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine("{0}年{1}月{2}日",time [0],time [1],time [2]);
Console.ReadKey();
八、把字串中某些字元或者字串替換掉
string name = "小明很漂亮!";
name =name .Replace ('很','不');
name = name.Replace("小明", "芳芳");
Console.WriteLine(name);
Console.ReadKey();
九、判斷字串中是否包含子字串
string name = "小豬是個壞蛋!";
bool result = name.Contains("小豬");
if (result)
{
//name = name.Replace("壞蛋", "好人");
name = name.Replace("壞蛋", "**");
Console.WriteLine(name);
}
else
{
Console.WriteLine(name);
}
Console.ReadKey();
十、擷取字串
string str = "哈哈,我帥不帥?";
str = str.Substring(4, 2);
Console.WriteLine(str );
Console.ReadKey();