最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

String

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

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

c#還允許使用類似于索引器的語法來提取指定的字符:

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

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

string 和 stringbuilder

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

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

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

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

var sb = new StringBuilder("Hello");

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

字符串格式

$前綴

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

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

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

StringFormat

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

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

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

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

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

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

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)義花括號

如果希望在插值字符串中包括花括號,可以使用兩個花括號轉(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)義花括號,從格式字符串中建立一個新的格式字符串。下面看看這個代碼段:

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

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

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

這會生成格式字符串,其中變量s替換為值Hello,刪除第二個格式最外層的花括號:

string formatstring = "Hello, {0}";

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

WriteLine("Hello, World");

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

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

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

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

Friday, February 14, 2025 
2/14/2025

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

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

結(jié)果如下:

14-Feb-2025

這個自定義格式字符串利用dd把日期顯示為兩個數(shù)字(如果某個日期在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格式字符串定義了一個數(shù)字格式,用組分隔符顯示整數(shù)和小數(shù)。e表示使用指數(shù)表示法,x表示轉(zhuǎn)換為十六進(jìn)制,c顯示貨幣:

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

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

正則表達(dá)式

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

  • 一組用于標(biāo)識特殊字符類型的轉(zhuǎn)義代碼。你可能很熟悉DOS命令中使用字符表示任意子字符串(例如, DOS命令DirRe會列出名稱以Re開頭的所有文件)。正則表達(dá)式使用與*類似的許多序列來表示“任 意一個字符”、“一個單詞的中斷”和個可選的字符”等。一個系統(tǒng),在搜索操作中把子字符串和中1:司結(jié)果的各個部分組合起來。
  • 識別(可以是標(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這個方 法的參數(shù)是一些輸入文本、一個模式和從RegexOptions枚舉中提取的一組可選標(biāo)志.

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

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

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

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ǔ)知識之字符串和正則表達(dá)式的文章就介紹到這了,更多相關(guān)C#字符串和正則表達(dá)式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#圖像處理之圖像均值方差計(jì)算的方法

    C#圖像處理之圖像均值方差計(jì)算的方法

    這篇文章主要介紹了C#圖像處理之圖像均值方差計(jì)算的方法,涉及C#圖像均值方差的計(jì)算技巧,需要的朋友可以參考下
    2015-04-04
  • C#調(diào)用USB攝像頭的方法

    C#調(diào)用USB攝像頭的方法

    這篇文章主要為大家詳細(xì)介紹了C#調(diào)用USB攝像頭的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • c#擴(kuò)展datatable轉(zhuǎn)json示例

    c#擴(kuò)展datatable轉(zhuǎn)json示例

    這篇文章主要介紹了c#擴(kuò)展datatable轉(zhuǎn)json示例,需要的朋友可以參考下
    2014-05-05
  • c# HashSet的擴(kuò)容機(jī)制需要注意的

    c# HashSet的擴(kuò)容機(jī)制需要注意的

    這篇文章主要介紹了c# HashSet的擴(kuò)容機(jī)制需要注意的兩個地方,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 詳解C#對Dictionary內(nèi)容的通用操作

    詳解C#對Dictionary內(nèi)容的通用操作

    這篇文章主要為大家詳細(xì)介紹了C#對Dictionary內(nèi)容的一些通用操作,例如:根據(jù)鍵移除信息、根據(jù)值移除信息、根據(jù)鍵獲取值等,需要的可以參考一下
    2022-06-06
  • C#使用foreach循環(huán)遍歷數(shù)組完整實(shí)例

    C#使用foreach循環(huán)遍歷數(shù)組完整實(shí)例

    這篇文章主要介紹了C#使用foreach循環(huán)遍歷數(shù)組,結(jié)合完整實(shí)例形式較為詳細(xì)的分析了C#遍歷數(shù)組的相關(guān)技巧,需要的朋友可以參考下
    2016-06-06
  • C# 解決datagridview控件顯示大量數(shù)據(jù)拖拉卡頓問題

    C# 解決datagridview控件顯示大量數(shù)據(jù)拖拉卡頓問題

    這篇文章主要介紹了C# 解決datagridview控件顯示大量數(shù)據(jù)拖拉卡頓問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C#程序加密工具.Net?Reactor詳細(xì)教程

    C#程序加密工具.Net?Reactor詳細(xì)教程

    .Net?Reacto加密工具是一款強(qiáng)大的?.NET?代碼保護(hù)和授權(quán)管理系統(tǒng),安全可靠、簡單易用,主要用來幫助開發(fā)人員保護(hù)他們的?.NET?軟件產(chǎn)品,本文給大家詳細(xì)介紹C#程序加密工具.Net?Reactor教程,感興趣的朋友一起看看吧
    2022-02-02
  • c#獲取兩個特定字符之間的內(nèi)容并輸出的方法

    c#獲取兩個特定字符之間的內(nèi)容并輸出的方法

    今天小編就為大家分享一篇c#獲取兩個特定字符之間的內(nèi)容并輸出的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • C# 使用模式匹配的好處總結(jié)

    C# 使用模式匹配的好處總結(jié)

    模式匹配的這些用途展示了它在簡化代碼、提高可讀性和靈活處理不同類型和條件的強(qiáng)大能力,隨著C#語言的發(fā)展,模式匹配的功能和應(yīng)用場景將會進(jìn)一步擴(kuò)展和深化,這篇文章主要介紹了C# 使用模式匹配的好處,需要的朋友可以參考下
    2024-07-07

最新評論

庆元县| 邢台市| 定边县| 西林县| 礼泉县| 台东市| 丰镇市| 绥德县| 巴彦县| 集安市| 赞皇县| 大名县| 左贡县| 镇康县| 喜德县| 肥城市| 阜新市| 石嘴山市| 高邑县| 琼海市| 大余县| 定兴县| 纳雍县| 长沙市| 抚顺市| 东安县| 乌拉特后旗| 宜兴市| 合山市| 哈巴河县| 昭通市| 克山县| 临清市| 唐海县| 桦川县| 尖扎县| 平乡县| 涞水县| 阜新市| 阿拉善右旗| 张家界市|