C# 基礎學習第四天
可變參數:
參數數組:int sum(params int[] values)
int sum(string name,params int[]values)
可變參數數組必須是最後一個
參數預設值 (.Net4.0):void
SayHello(string name,int age=20)(了解)
static void Main(string[] args)
{
SayHello("tom","張大虎","狗蛋"); //第一個參數是 name 第二個以後參數是為params string[] nicknames服務的!
Console.ReadKey();
}
static void SayHello(string name, params string[] nicknames) //params 可變數組!!參數可變
{
Console.WriteLine("我的名字是{0}",name);
foreach (string nickname in nicknames)
{
Console.WriteLine("我的昵稱:{0}",nickname);
}
}
顯示:我的名字是tom
我的昵稱:張大虎
我的昵稱:狗蛋
函數重載
構成重載的條件:
//函數的參數必須不一緻(函數名稱可以重複)
//參數類型不同或者參數個數不同,與傳回值無關
1、函數名相同、參數相同(錯誤)
static void Main(string[] args)
{
SayHello("王大壯");
SayHello("王小壯");
}
static void SayHello(string name)
{
Console.WriteLine("我是{0}",name);
}
static void SayHello(string name)
{
Console.WriteLine("I am{0}"name);
}
2、函數名相同、參數相同、傳回值不同(錯誤)
static void Main(string[] args)
{
SayHello("王大壯");
string s = SayHello("Tom");
}
static void SayHello(string name)
{
Console.WriteLine("我是{0}",name);
}
static string SayHello(string name)
{
return "大家好,我是:"+name;
}
3、函數名相同、參數不同(正确)
static void Main(string[] args)
{
SayHello("王大壯");
SayHello(20);
Console.ReadKey();
}
static void SayHello(string name)
{
Console.WriteLine("我是{0}",name);
}
static void SayHello(int age)
{
Console.WriteLine("我的年齡{0}",age);
}
4、函數名相同、參數不同多個參數(正确)
static void Main(string[] args)
{
SayHello("王大壯");
SayHello("大大王","孫猴子");
Console.ReadKey();
}
static void SayHello(string name)
{
Console.WriteLine("我是{0}",name);
}
static void SayHello(string name,string nickname)
{
Console.WriteLine("我是{0},昵稱是{1}",name,nickname);
}
字元串的處理:
('a')----char類型 一個字元
string s1 = "a"//想長就長想短就短 不等于 char c1= 'a';//有且隻能有一個字元
使用: 名稱.length屬性來後的字元串中的字元個數
例如: string s5 = "hello";
Console.WriteLine(s5.Length);//取字元串長度為5 不是6 和C語言不一樣,不考慮最後'\0'
Console.WriteLine(s5[1]);//取編号為1的字元//列印顯示 "e";
char c3 = s5[3];//取S5中第三個元素放到C3中
for(int i =0;i<s5.Length;i++)
{
char c6 = s5[i]
console.write(c6)
}
反序輸出:static void Main(string[] args)
{
string s5 = "hello";
string s = "";
for (int i = s5.Length - 1; i >= 0; i--)
{
s = s + s5[i];
}
Console.WriteLine(s);
Console.ReadKey();
}
C#中單個字元用單引号包含就是char類型,('a'),單引号中放且隻能放一個字元
char c1 ='a';//正确 char c2 ='abc';//錯誤
單個字元也可以表示為字元串,還可以有長度為0的字元串
string s1 ="hello"; string s2 ="a"; string s3 ="";
使用s.Length屬性來獲得字元串中的字元個數
string s5 = "hello";
console.writeLine(s5.length);
console.writeline(s5[1]);//第"1"個數為"e"
string可以看做是char的隻讀數組,char c= s[1];例子:周遊輸出string 中的每個元素
//正序反序列印
string s5 = "hello";
char c3 = s5[3];
for (int i = 0; i < s5.Length; i++)
{
char c6 = s5[i];
Console.WriteLine(c6);
}
for (int i = s5.Length - 1; i >= 0; i--)
{
Console.WriteLine(s5[i]);
}
C#中字元串有一個重要特性:
不可變性,字元串一旦聲明就不再可以改變,是以隻能通過索引來讀取指定位置的char,不能對指定的位置的char進行修改。
如果要對char進行修改,那麼就必須建立一個新的字元串,用S.ToCharArray()方法得到字元串的char數組,對數組進行修改後,調用new string(char[])這個構造函數(暫時不用細研究)來建立char數組的字元串,一旦字元串被建立,那麼char數組的修改也不會造成字元串的變化,例子:将字元串中的A替換為a。
//修改字元串
string s1 = "hello";
char[] chars = s1.ToCharArray();//得到hello這個字元串
chars[0]='a';
string s2 = new string(chars);
Console.WriteLine(s2);
Console.ReadKey();
// s1= hello s2 = aello
string s1 = "hello";
string s10= s1;//s10指向s1指向的字元串,而不是s10指向s1,哪怕s1以後指向其它記憶體,那麼s10還是指向hello;
String 類常用函數
1、ToLower():得到字元串的小寫形式。
s.ToLower()與s=s.ToLower();
ToUpper();得到字元串的大寫形式;
舉例說明:string s = "Hello";//s是不能被改變的
string str= s.ToLower();//得到一個新的字元串
// 一般寫為 s= s.ToLower()//并不是改變字元串内容,而是生成一個新的全部變為小寫的字元串,然後用s指向這個新的字元串。
Console.WriteLine(str);
Console.WriteLine(str.ToUpper());//轉換成大寫
Console.ReadKey();
注意:字元串是不可變的,是以這些函數都不會直接改變字元串的内容,而是把修改後的字元串的值通過函數傳回值的形式傳回。
2、Trim()去掉字元串兩端的空白。
string s1 = " ab ";//兩邊有空格
s1 = s1.Trim();//去掉兩邊的空白,隻留下有意義的部分
Console.WriteLine("|{0}|",s1);
Console.ReadKey();
3、s1.Equals(s2,StringComparison.OrdinallgnoreCase)兩個字元串進行比區分大小寫的比較
示例: bool b = "abc".Equals("ABC",StringComparison.OrdinalIgnoreCase);
//==是區分大小寫的比較,Equals("ABC",StringComparison.OrdinalIgnoreCase);是忽略大小寫的比較。
//IgnoreCase忽略大小寫
//兩個字元進行比較區分大小寫比較
Console.WriteLine(b);//結果為true
字元串的分割
一、string[] Split(params char[] separator):将字元串按照指定的分割符分割為字元串數組;
重載函數、可變函數 params
aaa,bbb,cccc,adfaf
傳回值是一個字元串數組
重點例題:
//以單個符号分割輸出
1、 string s1 = "aaa,vvv,ccc,dfafdasf";
//把一個字元串以","分隔,分别列印出來每個字元
string[] strs = s1.Split(',');//列印一個字元串,以指定的字元分割。重點!!
// 隻是輸出
foreach (string item in strs)
{
Console.WriteLine(item);
}
Console.ReadKey();
//以不同符号分割輸出
2、 string s1 = "aaa,vvv,ccc,dfafdasf.fsdfs|hell2232|ffsdf";
//把一個字元串以","分隔,分别列印出來每個字元
string[] strs = s1.Split(',','|','.');//列印一個字元串,以指定的字元分割。重點!!
// 隻是輸出
foreach (string item in strs)
{
Console.WriteLine(item);
}
Console.ReadKey();
二、string[] Split(char[] separator,StringSplitOptions options)将字元串按照指定的char分割符法呢個為字元串數組(options 取RemoveEmptyEntrles的時候移除結果中的空白字元串)
string s1 = "aaa,bb,cc,,12,3";//空的地方被識别為長度為0的字元串,可以使用重載函數清楚
例題: string[] strs = s1.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);
foreach(string item in strs)
{
Console.WriteLine(item);
}
Console.ReadKey();
三、string[] Split(string[] separator,StringSplitOptions options)将字元串按照指定的string分割符分割為字元串數組。
例題:string s1 = "我是傑克遜我是麥克新我是韓庚";
//按照"我是"進行分隔,字元串分割
string[] strs = s1.Split(new string[] { "我是" }, StringSplitOptions.RemoveEmptyEntries);
foreach(string item in strs)
{
Console.WriteLine(item);
}
Console.ReadKey();
練習: 1、從日期字元串("2008-08-08")中分析出年、月、日;
string s1 = "2008-08-08";
string[] strs = s1.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
foreach(string item in strs)
{
Console.WriteLine(item);
}
Console.ReadKey();
2、從一個記錄了學生成績的文本文檔,每個學生成績是一行,每行是用|分割的資料,用|分割的域分别是姓名、年齡、成績,寫程式取出成績最高學生的姓名和成績。
參考使用string[]lines=System.IO.File.ReadAllLines(@"c:\root.int",Encoding.Default);從文本檔案讀取資料,傳回值為string數組,每個元素是一行。
???????????????????????????????
字元串函數詳解
1、字元串替換:string Replace(string oldValue,string newValue)将字元串中的出現oldValue的地方替換為newValue。
例如:名字替換
string s = "李時珍同志是一個好同志,是一個好醫生,向李時珍通知學習";
s = s.Replace("李時珍","李素麗");//内容不可變,生成新字元串
Console.WriteLine(s);
Console.ReadKey();
//文章裡面敏感詞都變成“*”思路是這樣的
2、取子字元串:string SubString(int startIndex)取從位置startIndex開始一直到最後的子字元串;
string s ="http://www.baidu.com";
string 域名 =s.Substring(7);//取子字元串,從指定字元串開始,一直到最後
Console.WriteLine(域名);
Console.ReadKey();
3、string Substring(int starIndex,int length),取從位置startIndex開始長度為length的子字元串,如果子字元串的長度不夠length則報錯。
string s ="http://www.baidu.com";
string 域名 =s.Substring(7,5);//第二個參數是指截取多長,而不是截取位置,截取長度一定要夠長
Console.WriteLine(域名);
Console.ReadKey();
4、bool Contains(string value)判斷字元串中是否含有子串value
string s = "我們的社會真和諧啊";
if (s.Contains("社會") || s.Contains("和諧"))
{
Console.WriteLine("含有敏感詞彙,請文明用語!");
}
Console.ReadKey();
例如:判斷是不是網址,隻需要判斷是不是以http開頭的就可以了
5、bool StartsWith(string value)判斷字元串是否以子串value開始
string s = "http://www.cctv.com";
if (s.StartsWith("http://") || s.StartsWith("https://"))
{
Console.WriteLine("網址");
}
else
{
Console.WriteLine("不是網址");
}
Console.ReadKey();
6、bool EndWith(string value)同上,判斷字元串是否以子串value結束;
7、int Indexof(string value);取子串value第一次出現的位置
//傳回子字元串的第一個字元第一次出現的位置
//如果沒有查詢到相關字元,則輸出"-1"
string s = "你好,我是王某某";
int i = s.IndexOf("我是");
Console.WriteLine(i);
練習:1、接收使用者輸入的字元串,将其中的字元以與輸如相反的順序輸出。
Console.WriteLine("請輸入字元串:");
string str = Console.ReadLine();
string s = "";
for (int i = str.Length - 1; i >= 0; i--)
{
s = s + str[i];
}
Console.WriteLine(s);
Console.ReadKey();