欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中char和string的入門使用教程

 更新時(shí)間:2020年07月19日 09:47:51   作者:NanKingQG  
這篇文章主要給大家介紹了關(guān)于C#中char和string的入門使用教程,文中通過示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

char 字符

char代表一個(gè)Unicode字符,它是System.Char的別名

char someChar = 'a';//定義了一個(gè)字符
char newLine= '\n';//這是一個(gè)換行符

 System.Char定義了一組靜態(tài)方法:

  • ToUpper 將指定的字符轉(zhuǎn)換為等效的大寫形式
  • ToLower 將指定的字符轉(zhuǎn)換為等效的小寫形式
  • IsWhiteSpace 判斷指定的字符是否為空白字符
  • ……

例子:

Console.WriteLine(char.ToUpper('c'));//輸出的是一個(gè)大寫的C
Console.WriteLine(char.ToLower('c'));//輸出的是還是它自己
Console.WriteLine(char.ToUpper('C'));//輸出的是還是它自己
Console.WriteLine(char.ToLower('C'));//輸出的是一個(gè)小寫的c
Console.WriteLine(char.IsWhiteSpace('c'));//輸出為False
Console.WriteLine(char.IsWhiteSpace('\t'));//輸出為True
Console.WriteLine(char.IsWhiteSpace(' '));//輸出為True

可以通過char或者System.Char來調(diào)用

例子:

Console.WriteLine(char.ToUpper('c'));//輸出的是一個(gè)大寫的C
Console.WriteLine(System.Char.ToUpper('c'));//輸出的是一個(gè)大寫的C

現(xiàn)在這邊會(huì)有一個(gè)問題,可能會(huì)引起一個(gè)bug,就是ToUpper,ToLower會(huì)遵循用戶的地區(qū)設(shè)置,例如,char.ToUpper('i') == 'I',這句話在土耳其地區(qū)設(shè)置里就會(huì)返回False。

解決辦法就是使用culture-invariant版本的方法,總會(huì)應(yīng)用英語的Culture

  • ToUpperInvariant
  • ToLowerInvariant

例子:

//使用固定區(qū)域性的大小寫規(guī)則,不依賴于區(qū)域性的設(shè)置,以下這兩種方式是等價(jià)的
Console.WriteLine(char.ToUpperInvariant('i'));//輸出的是大寫的I
Console.WriteLine(char.ToUpper('i', CultureInfo.InvariantCulture));

char是16bit的,足夠代表基本多語言平面的任何Unicode字符,如果超出這個(gè)范圍,那么必須使用surrogate pairs。 

string 字符串

  • string是System.String的別名
  • string是不可變的
  • string是字符的序列

如何構(gòu)建string

例子:

string s1 = "Hello";
string s2 = "First Line\r\nSecond Line";
string s3 = @\\server\fileshare\helloworld.cs;

創(chuàng)建重復(fù)字符的字符串

使用string的構(gòu)造函數(shù)創(chuàng)建一個(gè)重復(fù)指定次數(shù)的字符的字符串。

例子:

Console.WriteLine(new string('*', 10));//輸出的結(jié)果就是**********

可以從char數(shù)組構(gòu)建字符串

例子:

char[] ca = "Hello".ToCharArray();
string s = new string(ca);

ToCharArray的作用正好相反,把字符串轉(zhuǎn)成字符數(shù)組。

string的構(gòu)造函數(shù)也被重載用來接收各種(不安全的)指針類型,目的是從像char*這樣的類型創(chuàng)建字符串。

Null 和 空string

空string的長度是0,通過literal或string.Empty靜態(tài)字段來創(chuàng)建

相等性比較的例子:

string empty = "";
Console.WriteLine(empty == ""); // True
Console.WriteLine(empty == string.Empty); // True
Console.WriteLine(empty.Length == 0); // True

string可以為null,因?yàn)槭且妙愋?/p>

string nullString = null;
Console.WriteLine(nullString == null); // True
Console.WriteLine(nullString == ""); // False
Console.WriteLine(nullString.Length == 0); // NullReferenceException

靜態(tài)的string.IsNullOrEmpty通常用來判斷字符串是否為空或者null,我習(xí)慣性使用IsNullOrWhiteSpace,這個(gè)判斷字符串是否為空或者null或者空白的字符。

訪問string里的字符

通過索引器

string str = "abcd";
char letter = str[1]; // letter = 'b'

string實(shí)現(xiàn)了IEnumerable<char>接口,所以可以foreach里面的每個(gè)元素

// 分別依次輸出字符1 、2 、3
foreach (var item in "123")
{
 Console.WriteLine(item);
}

在string里進(jìn)行搜索

最簡單的方法包括:StartsWith,EndsWith和Contains。返回的是true或者false。

Console.WriteLine("HelloWorld.cs".EndsWith(".cs")); // 返回結(jié)果為True
Console.WriteLine("HelloWorld.cs".Contains("World")); // 返回結(jié)果為True
Console.WriteLine("HelloWorld.cs".EndsWith(".CS")); // 返回結(jié)果為False
Console.WriteLine("HelloWorld.cs".Contains("world")); // 返回結(jié)果為False

StartsWith,EndsWith的重載方法允許你指定一個(gè)StringComparison枚舉或一個(gè)CultureInfo對(duì)象,以便控制大小寫和區(qū)域文化的敏感性,默認(rèn)使用當(dāng)前本地化的區(qū)域設(shè)置(locale),并且區(qū)分大小寫。

Console.WriteLine("HelloWorld.cs".StartsWith("hello", StringComparison.InvariantCultureIgnoreCase)); // 返回結(jié)果為True

Contains沒有提供類似的重載方法,但是你可以使用IndexOf方法,它會(huì)返回給定字符/子字符串在被搜索字符串里的首個(gè)位置。

同時(shí),IndexOf提供了重載方法,它可以接收一個(gè)起始位置參數(shù)(開始搜索的索引值),以及一個(gè)StringComparison枚舉

Console.WriteLine("abcde".IndexOf("cd")); // 結(jié)果為2
Console.WriteLine("abcde abcde".IndexOf("CD", 6, StringComparison.CurrentCultureIgnoreCase)); // 結(jié)果為8

LastIndexOf,它和IndexOf類似,但是它是反向搜索

IndexOfAny,它會(huì)返回一組字符里任意一個(gè)元素的第一個(gè)匹配的位置。

Console.WriteLine("abc,de f".IndexOfAny(new char[] { ' ', ',' })); // 結(jié)果為3
Console.WriteLine("sdgp5jesu5fa9afe0".IndexOfAny("0123456789".ToCharArray())); // 結(jié)果為4

LastIndexOfAny,功能類似,方向相反 

操縱或者控制 string

因?yàn)閟tring是不可變的,所以所有操縱string的方法返回的都是一個(gè)新的string,原來的string是原封不動(dòng)的。

Substring,會(huì)抽取字符串的一部分出來。

string left3 = "12345".Substring(0, 3); // 結(jié)果就是123
string mid3 = "12345".Substring(1, 3); // 結(jié)果為234
//如果忽略長度,那么就從起始位置一直到字符串的最后
string end3 = "12345".Substring(2); // 結(jié)果為345

Insert、Remove,在指定的位置插入、移除字符串。

string s1 = "helloworld".Insert(5, ","); // 結(jié)果為hello,world
string s2 = s1.Remove(5, 1); // 結(jié)果為helloworld

PadLeft、PadRight,會(huì)使用指定的字符(沒有指定就是空格)填充string,以達(dá)到指定的長度(如果string原本長度就長于指定的長度,那么它就不變)。

Console.WriteLine("12345".PadLeft(10, '*')); // 輸出結(jié)果就是*****12345
Console.WriteLine("12345".PadLeft(10)); // 輸出結(jié)果就是   12345

TrimStart,TrimEnd從開始或結(jié)尾移除指定的字符(默認(rèn)是空白符:空格,tab,換行以及Unicode里相應(yīng)的變種)。

Trim,會(huì)把開始和結(jié)尾的空白字符都移除。

Console.WriteLine("  abc \r\n ".Trim().Length); // 結(jié)果為3

Replace,替換所有指定的字符/字符串,(非重疊的)。

Console.WriteLine("hello world".Replace(" ", " | ")); // 結(jié)果為hello | world
Console.WriteLine("hello world".Replace(" ", "")); // 結(jié)果為helloworld

ToUpper,ToLower,返回string的大/小寫等等效形式。默認(rèn)情況下也遵循用戶當(dāng)前的語言設(shè)定,與上面的char的方法一樣,不再贅述。

拆分、合并字符串

Split方法可以拆分字符串。

  • 默認(rèn)使用空格作為分隔符
  • 重載方法可以接收param字符數(shù)組,或string作為分隔符
  • 可選接收StringSplitOptions枚舉作為參數(shù),有個(gè)選項(xiàng)可以移除空的字符串
string[] words = "my name is bob".Split();
//打印結(jié)果依次輸出my name is bob四個(gè)單詞
foreach (var item in words)
{
  Console.WriteLine(item);
}
string[] split1 = "123-abc".Split('-');
//打印結(jié)果依次輸出123和abc兩個(gè)字符串
foreach (var item in split1)
{
  Console.WriteLine(item);
}
string[] split2 = "123-abc-".Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
//打印結(jié)果依次輸出123和abc兩個(gè)字符串,最后一個(gè)空項(xiàng)會(huì)被移除
foreach (var item in split2)
{
  Console.WriteLine(item);
}

Join(靜態(tài))方法,功能與Split相反,用于合并成一個(gè)字符串,它需要一個(gè)分隔符和字符串?dāng)?shù)組。

string[] words = "my name is bob".Split();
Console.WriteLine(string.Join(",", words)); // 輸出結(jié)果為一個(gè)字符串my,name,is,bob

Concat(靜態(tài))方法,和Join類似,但是只接收params string數(shù)組作為參數(shù),無需分隔符。和+的效果一樣,起始編譯器就是把它翻譯成+。

string str1 = string.Concat("hello", "world"); // 結(jié)果為helloworld
string str2 = "hello" + "world"; // 結(jié)果為helloworld

String.Format 和 復(fù)合格式的string

Format(靜態(tài))方法,提供了一個(gè)方便的方式來構(gòu)建嵌入變量的字符串,嵌入的變量/值可以是任何類型,F(xiàn)ormat會(huì)調(diào)用它們的ToString方法。

含有嵌入變量的string就叫做復(fù)合格式string(composite format string)。

當(dāng)你調(diào)用String.Format的時(shí)候,你就得傳入一個(gè)復(fù)合格式string,后邊跟著它里面嵌入的這些變量。

string composite = "ab{0}cd{1}e";
Console.WriteLine(string.Format(composite, "123", 456)); // 結(jié)果為ab123cd456e

大括號(hào)里的每個(gè)數(shù)字都叫做格式化項(xiàng)(format item),數(shù)值對(duì)應(yīng)參數(shù)(argument)的位置,并且后邊可以跟著:

  • 一個(gè)逗號(hào),和一個(gè)要應(yīng)用的最小寬度(通常用來對(duì)齊列,負(fù)數(shù)表示左對(duì)齊,正數(shù)表示右對(duì)齊)
  • 一個(gè)冒號(hào),和一個(gè)格式化字符串(format string)
string composite = "Name={0, -20} Credit Limit={1,15:C}";
Console.WriteLine(string.Format(composite, "Bob", 500));
Console.WriteLine(string.Format(composite, "Elizatech", 20000));

結(jié)果如下:

 

 從C#6開始,你可以使用字符串插值的方式(interpolated string literals)。

int value = 32;
Console.WriteLine($"abc{value}"); //結(jié)果為abc32

總結(jié)

到此這篇關(guān)于C#中char和string入門使用教程的文章就介紹到這了,更多相關(guān)C# char和string使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#使用Objects?Comparer進(jìn)行對(duì)象比較

    C#使用Objects?Comparer進(jìn)行對(duì)象比較

    本文主要介紹了C#使用Objects?Comparer進(jìn)行對(duì)象比較,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 用 C# 編寫一個(gè)停放在任務(wù)欄上的圖標(biāo)程序

    用 C# 編寫一個(gè)停放在任務(wù)欄上的圖標(biāo)程序

    用 C# 編寫一個(gè)停放在任務(wù)欄上的圖標(biāo)程序...
    2007-03-03
  • C#非遞歸先序遍歷二叉樹實(shí)例

    C#非遞歸先序遍歷二叉樹實(shí)例

    這篇文章主要介紹了C#非遞歸先序遍歷二叉樹的實(shí)現(xiàn)方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • c#?Task.Wait()與awaiat?Task異常處理的區(qū)別說明

    c#?Task.Wait()與awaiat?Task異常處理的區(qū)別說明

    這篇文章主要介紹了c#?Task.Wait()與awaiat?Task異常處理的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • C#中基數(shù)排序算法的原理及實(shí)現(xiàn)

    C#中基數(shù)排序算法的原理及實(shí)現(xiàn)

    基數(shù)排序算法是一種非比較式的排序方法,通過分配和收集步驟對(duì)數(shù)字的每一位進(jìn)行排序,學(xué)習(xí)基數(shù)排序有助于提高排序效率,解決特定問題,廣泛應(yīng)用于多個(gè)領(lǐng)域如數(shù)據(jù)分析和數(shù)據(jù)庫索引建立等
    2024-10-10
  • C#控制圖像旋轉(zhuǎn)和翻轉(zhuǎn)的方法

    C#控制圖像旋轉(zhuǎn)和翻轉(zhuǎn)的方法

    這篇文章主要介紹了C#控制圖像旋轉(zhuǎn)和翻轉(zhuǎn)的方法,涉及C#圖像操作中RotateFlip方法的相關(guān)使用技巧,需要的朋友可以參考下
    2015-06-06
  • C# pictureBox用法案例詳解

    C# pictureBox用法案例詳解

    這篇文章主要介紹了C# pictureBox用法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 詳解如何獲取C#類中發(fā)生數(shù)據(jù)變化的屬性信息

    詳解如何獲取C#類中發(fā)生數(shù)據(jù)變化的屬性信息

    這篇文章主要介紹了詳解如何獲取C#類中發(fā)生數(shù)據(jù)變化的屬性信息,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • C#判等對(duì)象是否相等的方法匯總

    C#判等對(duì)象是否相等的方法匯總

    這篇文章主要介紹了C#判等對(duì)象是否相等的方法匯總,非常實(shí)用,需要的朋友可以參考下
    2014-08-08
  • C#中foreach語句深入研究

    C#中foreach語句深入研究

    這篇文章主要介紹了C#中foreach語句深入研究,本文通過手動(dòng)實(shí)現(xiàn)迭代器來了解foreach語句的本質(zhì),揭示其原理,需要的朋友可以參考下
    2015-06-06

最新評(píng)論