亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#基礎(chǔ)知識(shí)之字符串和正則表達(dá)式

 更新時(shí)間:2022年10月09日 10:42:11   作者:sufengmarket  
目前為止許多編程語(yǔ)言和工具都包含對(duì)正則表達(dá)式的支持,C#也不例外,下面這篇文章主要給大家介紹了關(guān)于C#基礎(chǔ)知識(shí)之字符串和正則表達(dá)式的相關(guān)資料,需要的朋友可以參考下

String

System.String類專門用于存儲(chǔ)字符串,允許對(duì)字符串進(jìn)行許多操作。此外,由于這種數(shù)據(jù)類型非常重要,C# 提供了它自己的關(guān)鍵字和相關(guān)的語(yǔ)法,以便使用這個(gè)類來(lái)輕松地處理字符串。使用運(yùn)算符重載可以連接字符串:

string messagel = ''Hello"; // returns "Hello" 
messagel += ”,There";   // returns "Hello, There"
string message2 = messagel + "!";  // returns "Hello, There! "

c#還允許使用類似于索引器的語(yǔ)法來(lái)提取指定的字符:

string message = ''Hello”;
char char4 = message[4]; // returns "0"

這個(gè)類可以完成許多常見的任務(wù),如替換字符、刪除空白和把字母變成大寫形式等。

string 和 stringbuilder

String類是一個(gè)功能非常強(qiáng)大的類,它實(shí)現(xiàn)許多很有用的方法。但是,String類存在一個(gè)問(wèn)題:
重復(fù)修改給定的字符串,效率會(huì)很低,它實(shí)際上是一個(gè)不可變的數(shù)據(jù)類型,這意味著一旦對(duì)字符串對(duì)象進(jìn)行了 初始化,該字符串對(duì)象就不能改變了。

string greetingText = "Hello from all the people at Wrox Press.
greetingText += **We do hope you enjoy this book as much as we enjoyed writing it.";

在執(zhí)行這段代碼時(shí),首先創(chuàng)建一個(gè)System.String類型的對(duì)象,并把它初始化為文本“Hello from all lhepeople at Wrox Press. ”,注意句號(hào)后面有一個(gè)空格。此時(shí).NET運(yùn)行庫(kù)會(huì)為該字符串分配足夠的內(nèi)存來(lái)保存這個(gè)文本(41 個(gè)字符),再設(shè)置變量greetingText來(lái)表示這個(gè)字符串實(shí)例。

從語(yǔ)法上看,下一行代碼是把更多的文本添加到字符串中。實(shí)際上并非如此,在此是創(chuàng)建一個(gè)新字符串實(shí) 例,給它分配足夠的內(nèi)存,以存儲(chǔ)合并的文本(共104個(gè)字符)。把最初的文本“Hello from all the people at Wrox Press. ” 復(fù)制到這個(gè)新字符串中,再加上額外的文本 “We do hope you enjoy this book as much as we enjoyed writing it.”。然后更新存儲(chǔ)在變量greetingText中的地址,使變量正確地指向新的字符串對(duì)象?,F(xiàn)在沒(méi)有引用舊的字符串 對(duì)象一不再有變量引用它,下一次垃圾收集器清理應(yīng)用程序中所有未使用的對(duì)象時(shí),就會(huì)刪除它。

StringBuilder類則不同,每次操作都是對(duì)自身對(duì)象進(jìn)行操作,而不是生成新的對(duì)象,其所占空間會(huì)隨著內(nèi)容的增加而擴(kuò)充,這樣,在做大量的修改操作時(shí),不會(huì)因生成大量匿名對(duì)象而影響系統(tǒng)性能。

var sb = new StringBuilder("Hello");

String是不可變類,StringBuilder是可變類。

字符串格式

$前綴

string si = "World"; 
string s2 = $"Hello, {s1}“;

在現(xiàn)實(shí)中,這只是語(yǔ)法糖。對(duì)于帶$前綴的字符串,編譯器創(chuàng)建String.Format方法的調(diào)用。所以前面的代碼段解讀為:

string si = "World";
string s2 = String.Format("Hello, {0}", si);

StringFormat

StringTormat方法的第一個(gè)參數(shù)接受一個(gè)格式字符串,其中的占位符從0開始編號(hào),其后是放入字符串空白處的參數(shù)。新的字符串格式要方便得多,不需要編寫那么多代碼。

不僅可以使用變量來(lái)填寫字符串的空白處,還可以使用返回一個(gè)值的任何方法:

string s2 = $”Hello, {<!--{C}%3C!%2D%2D%20%2D%2D%3E-->si. ToUpper() } '*;

這段代碼可解讀為如下類似的語(yǔ)句:

string s2 = String.Format(nHello, {<!--{C}%3C!%2D%2D%20%2D%2D%3E-->0}”,si.ToUpper ());

字符串還可以有多個(gè)空白處,如下所示的代碼:

int x = 3, y = 4;
string s3 = $"MThe result of {x} + {y}  is {x + y}'";

解讀為:

string s3 = String.Format("The result of {0} and {1} is {2 } ", x, y, x + y);

轉(zhuǎn)義花括號(hào)

如果希望在插值字符串中包括花括號(hào),可以使用兩個(gè)花括號(hào)轉(zhuǎn)義它們:

string s = "Hello";
Console.WriteLine($"{{s}}  displays the value of s:   {s}");

WriteLine方法被解讀為如下實(shí)現(xiàn)代碼:

Console.WriteLine (String.Format (*'{<!--{C}%3C!%2D%2D%20%2D%2D%3E-->s} displays the value of s: {<!--{C}%3C!%2D%2D%20%2D%2D%3E-->0}", s));

輸出如下:

{s}   displays the value of s :    Hello

還可以轉(zhuǎn)義花括號(hào),從格式字符串中建立一個(gè)新的格式字符串。下面看看這個(gè)代碼段:

string formatstring = $" {s},   {{0 } } "; 
string s2 = "World";
WriteLine(formatstring, s2);

有了字符串變量formatstring,編譯器會(huì)把占位符0插入變量s,調(diào)用String.Format:

string formatstring = String. Format ("{0}, {<!--{C}%3C!%2D%2D%20%2D%2D%3E-->{0} } ", s);

這會(huì)生成格式字符串,其中變量s替換為值Hello,刪除第二個(gè)格式最外層的花括號(hào):

string formatstring = "Hello, {0}";

在WriteLine方法的最后一行,使用變量s2的值把World字符串插值到新的占位符0中:

WriteLine("Hello, World");

日期時(shí)間和數(shù)字的格式

除了給占位符使用字符串格式之外,還可以根據(jù)數(shù)據(jù)類型使用特定的格式。下面先從日期開始。在占位符 中,格式字符串跟在表達(dá)式的后面,用冒號(hào)隔開。下面所示的例子是用于DateTime類型的D和d格式:

var day = new DateTime(2025, 2, 14); 
WriteLine ($"{day:D}");
WriteLine ($"{day:d}”);

結(jié)果顯示,用大寫字母D表示長(zhǎng)日期格式字符串,用小寫字母d表示短日期字符串:

Friday, February 14, 2025 
2/14/2025

應(yīng)該提到的一個(gè)問(wèn)題是,為DateTime構(gòu)建自定義的格式字符串。自定義的日期和時(shí)間格式字符串可以結(jié)合 格式說(shuō)明符,例如dd-MMM-yyyy:

Console.WriteLine($"{day:dd-MMM-yyyy}"); 

結(jié)果如下:

14-Feb-2025

這個(gè)自定義格式字符串利用dd把日期顯示為兩個(gè)數(shù)字(如果某個(gè)日期在10日之前,這就很重要,從這里可以看到d和dd之間的區(qū)別)、MMM(月份的縮寫名稱,注意它是大寫,而mm表示分鐘)和表示四位數(shù)年份的yyyy。

數(shù)字的格式字符串不區(qū)分大小寫。下面看看n、e、x和c標(biāo)準(zhǔn)數(shù)字格式字符串:

int i = 2477;
Console.WriteLine($"{i:n} {i:e} {i:x} {i:c}H);

n格式字符串定義了一個(gè)數(shù)字格式,用組分隔符顯示整數(shù)和小數(shù)。e表示使用指數(shù)表示法,x表示轉(zhuǎn)換為十六進(jìn)制,c顯示貨幣:

2,477.00 2.477000e+003 9ad $2,477.00

對(duì)于數(shù)字的表示,還可以使用定制的格式字符串。#格式說(shuō)明符是一個(gè)數(shù)字占位符,如果數(shù)字可用,就顯示 數(shù)字;如果數(shù)字不可用,就不顯示數(shù)字。0格式說(shuō)明符是一個(gè)零占位符,顯示相應(yīng)的數(shù)字,如果數(shù)字不存在

正則表達(dá)式

正則表達(dá)式語(yǔ)言是一種專門用于字符串處理的語(yǔ)言。它包含兩個(gè)功能:

  • 一組用于標(biāo)識(shí)特殊字符類型的轉(zhuǎn)義代碼。你可能很熟悉DOS命令中使用字符表示任意子字符串(例如, DOS命令DirRe會(huì)列出名稱以Re開頭的所有文件)。正則表達(dá)式使用與*類似的許多序列來(lái)表示“任 意一個(gè)字符”、“一個(gè)單詞的中斷”和個(gè)可選的字符”等。一個(gè)系統(tǒng),在搜索操作中把子字符串和中1:司結(jié)果的各個(gè)部分組合起來(lái)。
  • 識(shí)別(可以是標(biāo)記或刪除)字符串中所有重復(fù)的單詞,例如,把“The computer books books”轉(zhuǎn)換為“The computer books"
const string text =
            "Professional C# 6 and .NET Core 1.0 provides complete coverage " +
            "of the latest updates, features, and capabilities, giving you " +
            "everything you need for C#. Get expert instruction on the latest " +
            "changes to Visual Studio 2015, Windows Runtime, ADO.NET, ASP.NET, " +
            "Windows Store Apps, Windows Workflow Foundation, and more, with " +
            "clear explanations, no-nonsense pacing, and valuable expert insight. " +
            "This incredibly useful guide serves as both tutorial and desk " +
            "reference, providing a professional-level review of C# architecture " +
            "and its application in a number of areas. You'll gain a solid " +
            "background in managed code and .NET constructs within the context of " +
            "the 2015 release, so you can get acclimated quickly and get back to work.";
Console.WriteLine("Find1\n");
const string pattern = "ion";

MatchCollection matches = Regex.Matches(text, pattern,
                                        RegexOptions.IgnoreCase |
                                        RegexOptions.ExplicitCapture);
WriteMatches(text, matches);
Console.WriteLine();

在這段代碼中,使用了 System.Text.RegularExpressions名稱空間中Regex類的靜態(tài)方法Matches()0這個(gè)方 法的參數(shù)是一些輸入文本、一個(gè)模式和從RegexOptions枚舉中提取的一組可選標(biāo)志.

表描述了 RegexOptions枚舉的一些成員。

正則匹配主要符號(hào)規(guī)則如下:

在默認(rèn)情況下,把模式的一部分組合為一個(gè)組時(shí),就要求正則表達(dá)式引擎按照該組來(lái)匹配,或按照整個(gè)模式來(lái)匹配。換言之,可以把組當(dāng)成一個(gè)要匹配和返回的模式。如果要把字符 串分解為各個(gè)部分,這種模式就非常有效。

public static void NamedGroups()
{
     Console.WriteLine("NamedGroups\n");
     string line = "Hey, I've just found this amazing URI at http:// what was it --oh yes https://www.wrox.com or http://www.wrox.com:80";

     string pattern = @"\b(?<protocol>https?)(?:://)(?<address>[.\w]+)([\s:](?<port>[\d]{2,4})?)\b";
     Regex r = new Regex(pattern, RegexOptions.ExplicitCapture);

     MatchCollection mc = r.Matches(line);
     foreach (Match m in mc)
     {
         Console.WriteLine($"match: {m} at {m.Index}");

         foreach (var groupName in r.GetGroupNames())
         {
             Console.WriteLine($"match for {groupName}: {m.Groups[groupName].Value}");
         }
         Console.WriteLine();
     }
     Console.WriteLine();
}

總結(jié)

到此這篇關(guān)于C#基礎(chǔ)知識(shí)之字符串和正則表達(dá)式的文章就介紹到這了,更多相關(guān)C#字符串和正則表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#利用GDI+繪制旋轉(zhuǎn)文字等效果實(shí)例

    C#利用GDI+繪制旋轉(zhuǎn)文字等效果實(shí)例

    這篇文章主要介紹了C#利用GDI+繪制旋轉(zhuǎn)文字等效果實(shí)例,是非常實(shí)用的重要技巧,需要的朋友可以參考下
    2014-09-09
  • C#中的協(xié)變與逆變深入講解

    C#中的協(xié)變與逆變深入講解

    這篇文章主要給大家介紹了關(guān)于C#中協(xié)變與逆變的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • c# 獲取已安裝的打印機(jī)并調(diào)用打印文件

    c# 獲取已安裝的打印機(jī)并調(diào)用打印文件

    這篇文章主要介紹了c#如何獲取已安裝的打印機(jī)并調(diào)用打印文件,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-10-10
  • C#使用Jquery zTree實(shí)現(xiàn)樹狀結(jié)構(gòu)顯示 異步數(shù)據(jù)加載

    C#使用Jquery zTree實(shí)現(xiàn)樹狀結(jié)構(gòu)顯示 異步數(shù)據(jù)加載

    這篇文章主要為大家詳細(xì)介紹了C#使用Jquery zTree實(shí)現(xiàn)樹狀結(jié)構(gòu)顯示和異步數(shù)據(jù)加載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • C#操作注冊(cè)表之Registry類

    C#操作注冊(cè)表之Registry類

    這篇文章介紹了C#操作注冊(cè)表之Registry類,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • Unity實(shí)現(xiàn)物體跟隨鼠標(biāo)移動(dòng)

    Unity實(shí)現(xiàn)物體跟隨鼠標(biāo)移動(dòng)

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)物體跟隨鼠標(biāo)移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C#使用CefSharp自定義緩存實(shí)現(xiàn)

    C#使用CefSharp自定義緩存實(shí)現(xiàn)

    本文介紹了如何使用C#和CefSharp自定義緩存實(shí)現(xiàn)減少Web應(yīng)用程序的網(wǎng)絡(luò)請(qǐng)求,提高應(yīng)用程序性能。首先,本文講解了CefSharp的基本知識(shí)和使用方法。然后,詳細(xì)闡述了在CefSharp中實(shí)現(xiàn)自定義緩存的步驟和技巧。最后,通過(guò)實(shí)例演示了如何使用自定義緩存功能獲取并展示網(wǎng)頁(yè)數(shù)據(jù)
    2023-04-04
  • 基于集合的子集與集合的全排列的相關(guān)問(wèn)題

    基于集合的子集與集合的全排列的相關(guān)問(wèn)題

    本篇文章介紹了,集合的子集與集合的全排列的相關(guān)系列問(wèn)題說(shuō)明,需要的朋友參考下
    2013-05-05
  • C#制作鷹眼的詳細(xì)全過(guò)程(帶注釋)實(shí)例代碼

    C#制作鷹眼的詳細(xì)全過(guò)程(帶注釋)實(shí)例代碼

    C#制作鷹眼的詳細(xì)全過(guò)程(帶注釋)實(shí)例代碼,需要的朋友可以參考一下
    2013-03-03
  • C#實(shí)現(xiàn)網(wǎng)絡(luò)小程序的步驟詳解

    C#實(shí)現(xiàn)網(wǎng)絡(luò)小程序的步驟詳解

    經(jīng)常要檢測(cè)某些IP地址范圍段的計(jì)算機(jī)是否在線。有很多的方法,比如進(jìn)入到網(wǎng)關(guān)的交換機(jī)上去查詢、使用現(xiàn)成的工具或者編寫一個(gè)簡(jiǎn)單的DOS腳本等等,這些都比較容易實(shí)現(xiàn)。本文將用C#來(lái)實(shí)現(xiàn),感興趣的可以了解一下
    2022-12-12

最新評(píng)論