香蕉视频app

香蕉视频appKeep on going never give up.

Let's Go

C# 學習筆記(10)字符串常用操作

C#Lonely2019-04-27 17:14:56100次0條

香蕉视频app 比較常用的對字符串進行操作的方法:

判斷字符串是否為空

判斷字符串是否以xx開頭或結尾

字符串的修剪

字符串的替換

字符串的截取

字符串的刪除(移除)

字符串的分割

字符串的合并

字符串的查找

字符串的格式化

字符串的復制

字符串的插入與填充

字符串的比較


暗錨,解決錨點偏移 ● 判斷字符串是否為空

香蕉视频app string.IsNullOrEmpty() 指示指定的字符串是 null 還是 Empty 字符串。

string.IsNullOrWhiteSpace() 指示指定的字符串是 null、空還是僅由空白字符組成。

IsNullOrEmpty IsNullOrWhiteSpace
null true true
string.Empty true true
"" true true
"      " false true

string.IsNullOrEmpty方法無法判斷空字符串和帶有換行符的字符串,所以string.IsNullOrWhiteSpace方法的功能要更完善,而且 string.IsNullOrWhiteSpace方法的性能要更高。

代碼示例:

string str = string.Empty;
string str0 = null;
string str1 = "";
string str2 = "      ";

//IsNullOrEmpty
if (string.IsNullOrEmpty(str))
    Console.WriteLine("是為空"); //被輸出了
else
    Console.WriteLine("不為空");
if (string.IsNullOrEmpty(str0))
    Console.WriteLine("是為空"); //被輸出了
else
    Console.WriteLine("不為空");
if (string.IsNullOrEmpty(str1))
    Console.WriteLine("是為空"); //被輸出了
else
    Console.WriteLine("不為空");
if (string.IsNullOrEmpty(str2))
    Console.WriteLine("是為空"); 
else
    Console.WriteLine("不為空");//被輸出了
    
//IsNullOrWhiteSpace
if (string.IsNullOrWhiteSpace(str))
    Console.WriteLine("是為空"); //被輸出了
else
    Console.WriteLine("不為空");
if (string.IsNullOrWhiteSpace(str0))
    Console.WriteLine("是為空"); //被輸出了
else
    Console.WriteLine("不為空");
if (string.IsNullOrWhiteSpace(str1))
    Console.WriteLine("是為空"); //被輸出了
else
    Console.WriteLine("不為空");
if (string.IsNullOrWhiteSpace(str2))
    Console.WriteLine("是為空"); //被輸出了
else
    Console.WriteLine("不為空");
    
Console.ReadKey();


暗錨,解決錨點偏移 ● 判斷字符串是否以xx開頭或結尾

香蕉视频app 代碼示例:

string str = "只有看著別人的故事才能忘記自己的故事";
//判斷字符串是否以xx開頭
if (str.StartsWith("只有"))
    Console.WriteLine("是以只有開頭"); //被輸出了
else
    Console.WriteLine("不是以只有開頭"); 
              
//判斷字符串是否以xx結尾
if (str.EndsWith("故事"))
    Console.WriteLine("是以故事結尾"); //被輸出了            
else
    Console.WriteLine("不是以故事結尾");  
              
Console.ReadKey();


暗錨,解決錨點偏移 ● 字符串的修剪

字符串的修剪,修剪即為Trim,用于刪除字符串頭尾出現的某些字符。

c#中有三個修剪字符串的方法:

(1)、字符串.Trim(); 作用:刪除字符串首部和尾部的空格。

代碼示例:

string str = "             春夏秋冬                ";
Console.WriteLine("原字符是:\n【"+str +"】");
Console.WriteLine("修剪后的字符:\n【"+str .Trim() + "】");

運行結果:

image.png

(2)、字符串.TrimStart(); 作用:只刪除字符串頭部的空格。

香蕉视频app 代碼示例:

string str = "             春夏秋冬                ";
Console.WriteLine("原字符是:\n【"+str +"】");
Console.WriteLine("修剪后的字符:\n【"+str .TrimStart() + "】");

運行結果:

image.png

香蕉视频app (3)、字符串.TrimEnd(); 作用:只刪除字符串尾部的空格

代碼示例:

string str = "             春夏秋冬                ";
Console.WriteLine("原字符是:\n【"+str +"】");
Console.WriteLine("修剪后的字符:\n【"+str .TrimEnd() + "】");

運行結果:

image.png

(4)、字符串.Trim(需要修剪的字符1,需要修剪的字符2,需要修剪的字符……字符n);

代碼示例:

string str = "*%$#春夏秋冬#$%*";
Console.WriteLine("原字符是:\n" + str );
Console.WriteLine("修剪后的字符:\n" + str.Trim('*','%','#', '$'));

運行結果:

image.png

(5)、字符串.Trim("包含所有要修剪的字符串".ToCharArray());

代碼示例:

string str1 = "*%$#春夏秋冬@#$%*";
Console.WriteLine("原字符是:\n" + str1);
Console.WriteLine("修剪后的字符:\n" + str1.Trim("#%$*@".ToArray()));

運行結果:

image.png


暗錨,解決錨點偏移 ● 字符串的替換

香蕉视频app 字符串的替換是通過Replace來實現的,語法:字符串.Replace(要替換的原字符串,替換后的字符串);

代碼示例:

string str = "hello,world!";
Console.WriteLine("原字符串:"+str);
Console.WriteLine("替換后的字符串:"+ str.Replace('h', 'H'));

//例屏蔽指定字符
string str1 = "政府機關泄密";
if (str1.Contains("政府")) //判斷字符串中是否含有子串value
    str1 = str1.Replace("政府", "**"); //替換字符            
Console.WriteLine(str1);
Console.ReadKey();

運行結果:

image.png


暗錨,解決錨點偏移 ● 字符串的截取

方法一:字符串.Substring(整數n);  作用:將字符串前n個長度的字符串(n下標由0開始)截取掉,保留后面的字符串。

方法二:字符串.Substring(整數n,整數m); 作用:保留從字符串第n個長度開始數m個長度的字符串(n下標由0開始)。

香蕉视频app 這兩種重載格式都會返回一個新的字符串。

香蕉视频app 代碼示例:

//例:采用這兩種重載方法對字符串“0123456789”進行截取
string str = "0123456789";
string mystr = str.Substring(3); //從0開始數字符串,第3位開始截取,保留后面的字符串
Console.WriteLine(mystr); //輸出3456789

string mystr2 = mystr.Substring(3,4); //從0開始數字符串,第3位開始截取,保留4位字符串
Console.WriteLine(mystr2); //輸出3456


暗錨,解決錨點偏移 ● 字符串的刪除(移除)

香蕉视频app 字符串的刪除是通過Remove來實現的。

方法一:字符串.Remove(開始位置);作用:將字符串開始位置后的所有字符刪除。注:這里的開始位置是指字符串的索引,從下標0開始數。

法二:字符串.Remove(開始位置,移出數);作用:從開始位置數到移出數的位置的字符刪除。注:這里的開始位置是指字符串的索引,從下標0開始數。

代碼示例:

string str = "hbccjs.cn#ABCDEFG";
string mystr = str.Remove(12); 
Console.WriteLine(mystr); //輸出hbccjs.cn
string mystr1 = str.Remove(12,8); 
Console.WriteLine(mystr1); //輸出hbccjs.cn


暗錨,解決錨點偏移 ● 字符串的分割

分割字符串語法:字符串.Split(括號里填字符或字符數組);

代碼示例:

//例1:
string str = "Q-Blog#hbccjs.cn#歡迎來訪";
Console.WriteLine("原字符串為:" + str);
Console.WriteLine("分割后的字符串為:");
string[] mystr = str.Split('#');
 foreach (string s in mystr)
{
    Console.Write(s+ "\t");
}

運行結果:

image.png

//例2:
string str1 = "往事已成空,還如一夢中。《子夜歌》";
Console.WriteLine("原字符串為:" + str1);
Console.WriteLine("分割后的字符串為:");
string[] mystr1 = str1.Split(new char[] { ',','。'});
foreach (string s in mystr1)
{
    Console.Write(s + "\t");
}

運行結果:

image.png

//例3:分割字符串后,char數組不包含空字符串
string s = "A++B--C=D";
char[] arr = { '+', '-', '=' };//要分割的字符
string[] strArr = s.Split(arr, StringSplitOptions.RemoveEmptyEntries);
foreach (string temp in strArr)
{
    Console.Write(temp);
}
Console.ReadKey();

image.png


暗錨,解決錨點偏移 ● 字符串的合并

字符串合并的三種方法:

方法一:+連接

香蕉视频app 方法二:Concat語法:string.Concat(字符串1,字符串2,字符串3……字符串n);

方法香蕉视频app:Join語法:string.Join(合并后的分割符,字符串數組);

代碼示例:

string str1 = "茫茫人海中, ";
string str2 = "錯過了該錯過的,放棄了該放棄的, ";
string str3 = "于是,終于等到了你。";

//方法一:+連接
string mystr1 = str1 + str2 + str3;
Console.WriteLine("方法一(+):"+mystr1);

//方法二:Concat語法:string.Concat(字符串1,字符串2,字符串3……字符串n);
string mystr2 = string.Concat(str1, str2, str3);
Console.WriteLine("方法二(Concat):"+mystr2);

//方法三:Join語法:string.Join(合并后的分割符,字符串數組);
string[] strArr = { str1, str2, str3 };
string mystr3 = string.Join("",strArr);
Console.WriteLine("方法三(Join):" + mystr3);
Console.ReadKey();

香蕉视频app 運行結果:

image.png


暗錨,解決錨點偏移 ● 字符串的查找

香蕉视频app 字符串的查找是通過IndexOf和LastIndexOf這兩個方法來實現的。兩個方法均返回一個整數,如果要查找的字符串內,不包含要查找的字符換字符串,則返回一個負數。

香蕉视频app 代碼示例:

//IndexOf語法:字符串.IndexOf(要查找的字符或字符串);
//返回要查找的字符或字符串第一次在所要查找的字符串中出現的位置(下標從0開始索引)。
string str = "得之我幸,失之我命,如此而已。";
int num = str.IndexOf('此');
Console.WriteLine(num); //輸出11

//LastIndexOf語法:字符串.LastIndexOf(要查找的字符或字符串);
//返回要查找的字符或字符串最后一次在所要查找的字符串中出現的位置。
int index = str1.LastIndexOf('我');
Console.WriteLine(index); //輸出7
Console.ReadKey();


暗錨,解決錨點偏移 ● 字符串的格式化

香蕉视频app string.Format(); //有多種重載,這里只列舉兩個,有需要自己查看。

string.Format(要轉換的格式,格式化的對象);

香蕉视频app string.Format(要轉換的格式, 格式化的對象一, 格式化對象二);

代碼示例:

//例:通過字符串Format方法對2100和2100.33進行格式化并輸出轉化后的結果
Console.WriteLine("字符串的格式化輸出");
string mystr = string.Format("默認格式:{0}\n"+ "使用C格式:{0:C}\n"+ "使用D格式:{0:D}\n" + "使用E格式:{1:E}\n" + "使用F格式:{1:F}\n" + "使用G格式:{0:G}\n" + "使用N格式:{0:N}\n" + "使用P格式:{0:P}\n" + "使用X格式:{0:X}\n",2100,2100.33);
Console.WriteLine(mystr);
string str = string.Format("{0:C}",2100);
Console.WriteLine(str );

Console.WriteLine("輸出001-050:");
for (int i = 1; i < 51; i++)
{    
    Console.WriteLine("{0:D3}",i); //也可以直接寫到輸出語句上   
}
Console.ReadKey();

運行結果:

image.png


暗錨,解決錨點偏移 ● 字符串的復制

香蕉视频app C#中字符串的復制是通過Copy和CopyTo來實現的。

方法一:Copy:string.Copy(需要復制的字符串); //靜態方法

方法二:CopyTo:字符串變量名.Copy(要復制字符的起始位置,目標字符數組,目標字符數組中的開始存放位置,要復制的字符個數); //非靜態方法

代碼示例:

//方法一:
string str = "http://hbccjs.cn";
string mystr = string.Copy(str);
Console.WriteLine(mystr); //輸出http://hbccjs.cn
   
//方法二:     
char[] arr = new char [12];
str.CopyTo(7, arr , 0, 12);
Console.WriteLine(arr); //輸出hbccjs.cn
Console.ReadKey();


暗錨,解決錨點偏移 ● 字符串的插入與填充

香蕉视频app 字符串的插入語法:字符串.Insert(插入位置,插入子串);注:這里的插入位置指的是索引值,下標由0開始數。

字符串的填充:填充是通過PadRight(填充右邊)和PadLeft(填充左邊)實現的。

代碼示例:

//字符串的插入
string str = "Hello,world";
string insertStr = str.Insert(11, "!!!"); //輸出Hello,world!!!
Console.WriteLine(insertStr );
           
//字符串的填充:
//填充是通過PadRight(填充右邊)和PadLeft(填充左邊)實現的。
//PadRight方法是在字符串的結尾,通過添加指定的重復字符填充字符串。
//PadRight語法:
//字符串.PadRight(總長度); //以空格填充。
//字符串.PadRight(總長度,要填充的char字符);
string myStr1 = "六六六";
string myStr2= "八八八八八";
string myStr3= "九九九九九九九";
string padRightStr = myStr1 .PadRight(8, '填')+"\n"+ myStr2.PadRight(8, '填') + "\n" + myStr3.PadRight(8, '填');
Console.WriteLine(padRightStr);

//PadLeft方法是在字符串的開頭,通過添加指定的重復字符填充字符串。
//PadLeft語法:
//字符串.PadLeft(總長度); //以空格填充。
//字符串.PadLeft(總長度,要填充的char字符);
string padLeftStr = myStr1 .PadLeft(13) + "\n" + myStr2.PadLeft(11) + "\n" + myStr3.PadLeft(9);
Console.WriteLine(padLeftStr );
Console.ReadKey();

運行結果:

image.png


暗錨,解決錨點偏移 ● 字符串的比較

香蕉视频app string.Equals(); //多種重載

string.Compare(); //字符串大小比較函數,該函數有多種重載

香蕉视频app 代碼示例:

//Equals方法,這里只列舉兩個。
//string.Equals(字符串1,字符串2) 返回布爾值
string s1 = "hello";
string s2 = "hi";
Console.WriteLine(string .Equals(s1,s2)); //輸出False

//忽略大小寫進行比較
string str1 = "c#";
string str2 = "C#";
if (str1.Equals(str2, StringComparison.OrdinalIgnoreCase))
{
    Console.WriteLine("輸入的字符串相同"); //被輸出了
}


//Compare方法,這里只列舉兩個。
//string.Compare(字符串1,字符串2)
Console.WriteLine(string.Compare(s1, s2)); //輸出了-1

//string.Compare(字符串1,字符串2,布爾值) 返回一個整數
//返回的整數小于0,字符串1<字符串2
//返回的整數等于0,字符串1=字符串2
//返回的整數大于0,字符串1>字符串2
//布爾值為true時,忽略大小寫進行比較
Console.WriteLine(string.Compare(s1, s2,true)); //輸出了-1

//CompareTo方法
//字符串1.CompareTo(字符串2)
//返回的整數小于0,字符串1<字符串2
//返回的整數等于0,字符串1=字符串2
//返回的整數大于0,字符串1>字符串2,或字符串2為null引用。
Console.WriteLine(s1.CompareTo(s2)); //輸出了-1

Console.ReadKey();

問:== 和 equals的區別是什么?

答: 

1、值類型的比較

對于值類型來說  兩者比較的都是“內容”是否相同,即  是否一樣,很顯然此時兩者是劃等號的。

//例:
int i = 10;
int j = 10;
Console.WriteLine("值類型Equals和= =(等于號)的比較:");
Console.WriteLine("i==j 輸出:" + (i == j)); //輸出True
Console.WriteLine("i.Equals(j) 輸出:" + i.Equals(j)); //輸出True

結論:對于值類型來說  兩者是相同的 都是比較的變量的值


2、引用類型的比較

對于引用類型來說,等號(==)比較的是兩個變量的“引用”是否一樣,即引用的“地址”是否相同。而對于equals來說仍然比較的是變量的 “內容”是否一樣。

(1)、字符串的比較

//對于string字符串的比較
string s1 = "abc";
string s2 = "abc";
Console.WriteLine("引用類型Equals和= =(等于號)的比較:");
Console.WriteLine("s1==s2 輸出:" + (s1 == s2)); //輸出True
Console.WriteLine("s1.Equals(s2) 輸出:" + s1.Equals(s2)); //輸出True

香蕉视频app 是不是感到疑問?上面說的 ==號是比較兩個引用類型的變量的引用地址是否一致,但是上面的s1 和s2是兩個不同的變量,為何比較的輸出是true呢?

香蕉视频app  原因是:由于string是微軟封裝的一個字符串類,在內部他已經對 == 操作符進行了重寫。重寫后他比較的則是兩個變量的內容是否相同,即重寫后的 == 操作符內部調用的還是 equals 方法,所以輸出的是true。

(2)、 自定義的其他引用類型 —— person類為例

Person p1 = new Person("小明", "男");
Person p2 = new Person("小明", "男");
Console.WriteLine("引用類型Equals和= =(等于號)的比較:");
Console.WriteLine("p1==p2 輸出:" + (p1 == p2)); //輸出False
Console.WriteLine("p1.Equals(p2) 輸出:" + p1.Equals(p2)); //輸出False

對于 p1==p2 比較的結果為False,這點是毫無疑問的,因為他倆是兩個不同的變量,所以引用的地址也是不同的。但是對于p1.Equals(p2) 返回False,可能有人會產生疑問,p1 和p2的內容是相同的啊,為什么他倆的比較結果卻是為False呢?原因就在于在Equals是Object中的一個虛方法,而person類中沒有對它進行重寫,因此此時調用的仍是父類中的Equals方法。但是父類是無法知道你都有哪些成員字段的,因此返回的是False。要想讓它能夠比較兩個變量的內容是否相同,那就應該重寫Equals方法,代碼如下:

public override bool Equals(object obj)
{
    Person p = obj as Person;
    //對變量的所有的屬性都要進行比較,只有都相同時才返回true。
    if (this.Name == p.Name && this.Sex == p.Sex)
        return true;
    else
        return false;
}

結論:Equals比較的永遠是變量的內容是否相同,而==比較的則是引用地址是否相同(前提:此種類型內部沒有對Equals 或== 進行重寫操作,否則輸出可能會有所不同,如:string 類型是個特例,因為它的內部對這兩個都進行了重寫)。


問:Compare方法與CompareTo方法字符串大小比較的原理是什么?

答:從兩個字符串的第一個字符開始逐個進行比較(按字符的ASCII值進行大小比較),直到出現不同的字符或遇到‘\0’為止。如果全部字符都相同,就認為兩字符串相等,返回0;若出現了不相同的字符,則以第一個不相同的字符比較結果為準,若前者字符大于后者,則返回1,否則返回-1.

注意:順序是第一個對象與第二個對象比較!

  前>后 return 1;

  前=后 return 0;

  前<后 return -1

CompareTo方法與Compare方法實現的功能是一樣的,只是參數的位置放的不一樣而已。




暗錨,解決錨點偏移

文章評論

    嘿,來試試登錄吧!