您好,登錄后才能下訂單哦!
C# for Unity編程語言快速入門教程(連載12)_C#的字符串
“C#字符串”是一個重要的知識點,對于C#初學者來說有很多重要知識點需要進行學習,總體歸納有三個大的方面:
知識點一: 字符串的常用方法與屬性
屬性:
Length: 得到字符串的長度
方法:
IsNullOrEmpty() 表示空字符串:
IndexOf() : 查找指定字符(子字符串)。
SubString(): 字符串截取(得到子字符串)
Split(): 截斷字符串。(返回字符串數(shù)組)
Format(): 格式化方法
Join(): (靜態(tài)方法)連接字符串。
Format(): (靜態(tài)方法)格式化字符串
Replace(): 替換方法。
Trim(); 剔除字符串兩邊的空格。
parse(); 字符串轉(zhuǎn)換基本數(shù)據(jù)類型
tryParse(); 字符串轉(zhuǎn)換基本數(shù)據(jù)類型(帶異常處理,更安全)
(備注:目前常用字符串與基本數(shù)據(jù)類型的轉(zhuǎn)換用Convert 更多一些)
Remove(): 刪除字符串
知識點二: 字符串的“相等性”判斷
判斷 Equals() 與 == 的區(qū)別。
1> "==" 比較時
A) 如果比較的是值類型,則比較兩個對象的值。
B) 如果比較的是引用類型,則比較兩個對象的引用是否相同(堆地址是否相同)。
2> "Equals"比較時
A) 此方法是Object 里面的一個虛方法,默認是用==進行比較。
B) 但是,大部分微軟的類,及用戶自定義的類,都重寫了該虛方法。
知識點三: 字符串的“駐留性”(不變性、恒定性)
字符串的“駐留性”意思是字符串一旦定義好,則會在內(nèi)存連續(xù)開辟一個區(qū)域, 當我們用連接操作符("+"),對字符串做“連接”操作時,則舊的字符串不會發(fā)生變化,而是再新開辟一個區(qū)域,把舊的字符串與新的字符串進行連接后,存儲在新的字符串中。
以上就是字符串“駐留性”的基本原理,我們從這個原理中會自然推導(dǎo)出: 如果大量的字符串做連接,則勢必會造成內(nèi)存空間的大量浪費! 如何解決這個問題呢,微軟公司給我們提供了一個專門處理大量字符串連接的類:StringBuilder
針對以上知識點,提供如下示例,供大家參考。
知識點一(字符串常用方法與屬性)部分習題與參考答案:
class Demo1
{
//題目1: 輸入若干個字符,然后按照相反的次序輸出,
//例如輸入: Hello everyone ,輸出 enoyreve olleH
public void Test1()
{
string str = "Hello everyone";
//for (int i = 0; i < str.Length; i++)
for (int i = str.Length-1; i>=0; i--)
{
string strTemp=str.Substring(i,1);
Console.Write(strTemp);
}
}
/// <summary>
/// 反轉(zhuǎn)字符串
/// </summary>
/// <param name="strOrignial">原字符串</param>
/// <returns>反轉(zhuǎn)之后的字符串</returns>
private string ReverseString(string strOrignial)
{
string strResult=null; //返回之后的返回字符串
for (int i = strOrignial.Length - 1; i >= 0; i--)
{
string strTemp = strOrignial.Substring(i, 1);
strResult = strResult + strTemp; //字符串的串聯(lián)。
}
return strResult;
}
/// <summary>
/// 判斷回文字符串。
/// </summary>
/// <param name="str">原始字符串</param>
/// <returns>
/// true: 是回文字符串,
/// false; 不是
/// </returns>
private bool JudgeCircleString(string str)
{
//反轉(zhuǎn)之后的結(jié)果
string strReverseResult = null;
strReverseResult = ReverseString(str);
if (strReverseResult == str)
{
return true;
}
else
{
return false;
}
}
//題目2: 判斷回文字符串。
//例如: rotor 就是回文字符串。
public void Test2()
{
string str = "AbcdcbA";
string strReverseResult = null; //反轉(zhuǎn)之后的結(jié)果
strReverseResult=ReverseString(str);
if (strReverseResult == str)
{
Console.WriteLine("是回文字符串");
}
else {
Console.WriteLine("不是回文字符串");
}
}
//題目3: 請找出1-256中所有的回文數(shù)。
public void Test3()
{
for (int i = 1; i <=256; i++)
{
bool boolResult=JudgeCircleString(i.ToString());
if (boolResult)
{
Console.WriteLine(i);
}
}
}
//題目4: 寫一個方法,對給定的Emall 字符串做檢驗。
// 要求: 1)要求字符串中包含“@”字符與“.”字符。
// 2)要求字符串中@ 字符在 . 字符之前。
public bool JudgeEmall(string emall)
{
bool boolJudgeResult = false; //判斷結(jié)果
int intIndexPosionAt = -1; //@字符在字符串的位置
int intIndexPosionDot = -1; //"."字符在字符串中的位置
intIndexPosionAt = emall.IndexOf("@");
intIndexPosionDot = emall.IndexOf(".");
if (intIndexPosionAt != -1 && intIndexPosionDot!=-1)
{
if (intIndexPosionAt < intIndexPosionDot)
{
boolJudgeResult = true;
}
}
return boolJudgeResult;
}
public static void Main()
{
Demo1 obj = new Demo1();
bool boolResult=obj.JudgeEmall("zhangsan@yahoo.com");
if (boolResult)
{
Console.WriteLine("合法Emall");
}else{
Console.WriteLine("不合法");
}
}
}
知識點二(字符串的“相等性”判斷)部分習題與參考答案:
public class Person
{
string name;
int age;
public Person(string strName ,int intAge)
{
name = strName;
age = intAge;
}
public override bool Equals(object obj)
{
Person anotherPer = obj as Person;
if(this.name==anotherPer.name && this.age==anotherPer.age)
{
return true;
}else{
return false;
}
}
}
class Demo2
{
/// <summary>
/// "=="相等性判斷
/// </summary>
public void Test1()
{
Person p1 = new Person("小龍女",25);
Person p2 = new Person("范冰冰", 25);
if(p1==p2)
{
Console.WriteLine("p1==p2");
}else{
Console.WriteLine("p1!=p2");
}
}
/// <summary>
/// "Equals"相等性判斷
/// </summary>
public void Test2()
{
Person p1 = new Person("小龍女", 25);
Person p2 = new Person("小龍女", 25);
if (p1.Equals(p2))
{
Console.WriteLine("p1 等于 p2");
}
else
{
Console.WriteLine("p1 不等于 p2");
}
}
}
知識點三(字符串的“駐留性”)部分習題與參考答案:
class Demo3
{
//學習字符串的“恒定性”
public void Test0()
{
string str1 = "李冰冰";
string str2 = "范冰冰";
string str3 = "李冰冰";
string str4 = "李冰冰" + "范冰冰";
string str5 = str1 + str2;
string str6 = "李冰冰范冰冰";
Console.WriteLine(str1==str2);//F
Console.WriteLine(str1==str3);//T 如何理解呢?
Console.WriteLine(str4==str5);//T
//比較地址引用是否相同
Console.WriteLine(string.ReferenceEquals(str4,str5));//F
Console.WriteLine(string.ReferenceEquals(str4, str6));//T ??
Console.WriteLine(string.ReferenceEquals(str5, str6));//F
}
//演示為什么需要學習StringBuder。 即:string 存在的問題。
public void Test1()
{
string str = "大家上午";
str=str+"好!";
str = str + "a";
str = str + "b";
str = str + "c";
Console.WriteLine("str="+str);
}
//StringBuider 主要就是做字符串的“串聯(lián)”使用。
public void TestStringBuilder()
{
StringBuilder sbu = new StringBuilder();
sbu.Append("大家上午");
sbu.Append("好!");
sbu.Append("a");
sbu.Append("b");
sbu.Append("c");
sbu.Insert(2,"ABC");
Console.WriteLine(sbu.ToString());
}
static void Main1(string[] args)
{
Program obj = new Program();
obj.TestStringBuilder();
}
}
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。