一文解析C#中的StringSplitOptions枚舉
本篇文章來(lái)分享一下C#的StringSplitOptions枚舉,StringSplitOptions是C#中的一個(gè)枚舉類(lèi)型,用于控制string.Split()方法分割字符串時(shí)的行為,核心作用是處理分割后產(chǎn)生的“空字符串”或“空白字符串”,讓開(kāi)發(fā)者能精確控制分割結(jié)果的格式。
C#的StringSplitOptions枚舉
1.StringSplitOptions枚舉的常用成員
枚舉值 | 含義描述 | 適用場(chǎng)景 |
None | 保留所有分割結(jié)果,包括空字符串("")和空白字符串(" ")。 | 需要完整保留分割節(jié)點(diǎn)(如解析固定格式協(xié)議數(shù)據(jù),空值有特殊含義)。 |
RemoveEmptyEntries | 移除純空字符串(""),但保留含空白的字符串(如 " ")。 | 分割后需忽略空值,但保留空白內(nèi)容(如 CSV 中空白字段有意義)。 |
TrimEntries | 先去除每個(gè)分割結(jié)果的前后空白,再移除空字符串(.NET 5+ 新增)。 | 處理用戶(hù)輸入或格式不規(guī)范的文本(自動(dòng)清理空格)。 |
2.關(guān)鍵區(qū)別:用示例對(duì)比三種行為
假設(shè)存在一個(gè)待分割的字符串:"apple,, banana, , orange"(包含連續(xù)逗號(hào)、帶空格的內(nèi)容、純空白字符串),用','作為分隔符,三種選項(xiàng)的結(jié)果差異如下:
2.1.StringSplitOptions.None(默認(rèn))
保留所有分割結(jié)果,包括空字符串和空白字符串:
string input = "apple,, banana, , orange";
string[] result = input.Split(',', StringSplitOptions.None);
//結(jié)果(5個(gè)元素):
//["apple", "", " banana", " ", " orange"]2.2.StringSplitOptions.RemoveEmptyEntries
移除純空字符串(""),但保留帶空白的字符串(" banana"、" "):
string[] result = input.Split(',', StringSplitOptions.RemoveEmptyEntries);
//結(jié)果(4個(gè)元素):
//["apple", " banana", " ", " orange"]2.3.StringSplitOptions.TrimEntries(.NET 5+)
先修剪每個(gè)結(jié)果的前后空白,再移除空字符串:
string[] result = input.Split(',', StringSplitOptions.TrimEntries);
//步驟1:修剪每個(gè)分割結(jié)果的空白
//["apple", "", "banana", "", "orange"]
//步驟2:移除空字符串
//最終結(jié)果(3個(gè)元素):["apple", "banana", "orange"]3.常見(jiàn)使用場(chǎng)景
3.1.處理用戶(hù)輸入的標(biāo)簽(可能有連續(xù)逗號(hào)或空格)StringSplitOptions.TrimEntries
用戶(hù)輸入:"C#, Java,, Python ",希望得到干凈的字符串:
string input = "C#, Java,, Python ";
//先按逗號(hào)分割,再修剪空白并移除空值
string[] tags = input.Split(',', StringSplitOptions.TrimEntries);
//結(jié)果:["C#", "Java", "Python"]3.2.解析固定格式的配置(需保留空值位置)StringSplitOptions.None
配置字符串:"100,,true, "(位置2為必填空值,位置4為空白標(biāo)記),需保留所有位置信息:
string config = "100,,true, ";
//保留所有結(jié)果,不刪除空值或空白
string[] configValues = config.Split(',', StringSplitOptions.None);
//結(jié)果:["100", "", "true", " "](后續(xù)可根據(jù)位置解析含義)3.3.讀取CSV文件的字段(忽略空行但保留空白字段)StringSplitOptions.RemoveEmptyEntries
CSV行:"Alice,,30, New York "(中間有必填空字段):
string csvLine = "Alice,,30, New York ";
//移除純空字符串,但保留帶空白的字段(如" New York ")
string[] fields = csvLine.Split(',', StringSplitOptions.RemoveEmptyEntries);
//結(jié)果:["Alice", "30", " New York "]4.注意事項(xiàng)
4.1.TrimEntries的兼容性
該成員僅在.NET5、.NETCore3.0+及.NETFramework4.8+中可用,低版本需手動(dòng)處理(先分割,再用Trim()修剪每個(gè)元素,最后過(guò)濾空值)。
string[] result = input.Split(',')
.Select(s => s.Trim())
.Where(s => !string.IsNullOrEmpty(s))
.ToArray();4.2.多分隔符場(chǎng)景同樣適用
不僅支持單個(gè)分隔符,也支持多個(gè)分隔符(如按,和;分割):
string input = "apple; banana,, orange";
string[] result = input.Split(new[] { ',', ';' }, StringSplitOptions.TrimEntries);
//結(jié)果:["apple", "banana", "orange"]5.總結(jié)
StringSplitOptions是控制Split()方法結(jié)果格式的核心枚舉,選擇哪個(gè)成員取決于業(yè)務(wù)需求,合理使用該枚舉能避免后續(xù)對(duì)分割結(jié)果的繁瑣處理,讓代碼更簡(jiǎn)潔、健壯。
需完整保留所有分割結(jié)果(包括空值)→用None;
需移除純空值但保留空白→用RemoveEmptyEntries;
需清理空白并移除空值(.NET5+)→用TrimEntries。
到此這篇關(guān)于C#的StringSplitOptions枚舉的文章就介紹到這了,更多相關(guān)C# StringSplitOptions枚舉,C# StringSplitOptions內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#動(dòng)態(tài)創(chuàng)建Access數(shù)據(jù)庫(kù)及表的方法
這篇文章主要介紹了C#動(dòng)態(tài)創(chuàng)建Access數(shù)據(jù)庫(kù)及表的方法,以實(shí)例形式分析了創(chuàng)建access數(shù)據(jù)庫(kù)及在access數(shù)據(jù)庫(kù)中建表的完整過(guò)程,是非常實(shí)用的技巧,需要的朋友可以參考下2014-12-12
C# 操作 access 數(shù)據(jù)庫(kù)的實(shí)例代碼
這篇文章主要介紹了C# 操作 access 數(shù)據(jù)庫(kù)的實(shí)例代碼,需要的朋友可以參考下2018-03-03
Unity游戲腳本開(kāi)發(fā)的生命周期函數(shù)詳解(Update/FixedUpdate)
本文介紹了Unity游戲開(kāi)發(fā)中腳本的生命周期函數(shù)Update/FixedUpdate的核心概念、技術(shù)原理、應(yīng)用場(chǎng)景、實(shí)踐應(yīng)用、常見(jiàn)問(wèn)題與解決方案及最佳實(shí)踐等內(nèi)容,通過(guò)學(xué)習(xí),可以掌握關(guān)鍵技術(shù)要點(diǎn),提升游戲開(kāi)發(fā)效率和項(xiàng)目質(zhì)量2026-05-05
C#中dynamic動(dòng)態(tài)類(lèi)型的具體使用
C#中,dynamic是一種動(dòng)態(tài)類(lèi)型,用于在編譯時(shí)繞過(guò)類(lèi)型檢查,并將類(lèi)型檢查推遲到運(yùn)行時(shí),這種特性可以用來(lái)簡(jiǎn)化與動(dòng)態(tài)對(duì)象或需要高度靈活性的代碼的交互,下面就來(lái)具有介紹一下2025-12-12
C#實(shí)現(xiàn)windows form倒計(jì)時(shí)的方法
這篇文章主要介紹了C#實(shí)現(xiàn)windows form倒計(jì)時(shí)的方法,涉及C#桌面程序設(shè)計(jì)中時(shí)間操作的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
解決C#運(yùn)行程序修改數(shù)據(jù)后數(shù)據(jù)表不做更新的問(wèn)題
近日,在使用C#連接數(shù)據(jù)庫(kù)的時(shí)候,對(duì)數(shù)據(jù)庫(kù)中的表做更新后,在當(dāng)前啟動(dòng)項(xiàng)目中去顯示表數(shù)據(jù)時(shí)雖然會(huì)發(fā)生一個(gè)更新,但是在結(jié)束程序運(yùn)行后再去觀察數(shù)據(jù)表中的記錄時(shí)發(fā)現(xiàn)并沒(méi)有發(fā)生一個(gè)變化,所以本文給大家解決一下這個(gè)問(wèn)題,需要的朋友可以參考下2023-08-08
Entity?Framework模型優(yōu)先與實(shí)體對(duì)象查詢(xún)
這篇文章介紹了Entity?Framework模型優(yōu)先與實(shí)體對(duì)象查詢(xún),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
基于C#的socket編程的TCP異步的實(shí)現(xiàn)代碼
本篇文章主要介紹了基于C#的socket編程的TCP異步的實(shí)現(xiàn)代碼,詳解的講訴了TCP通信異步的實(shí)現(xiàn),有興趣的可以了解一下。2016-11-11

