C#字符串拆分

如果我有一个字符串: str1|str2|str3|srt4并用|解析它 作为分隔符。 我的输出是str1 str2 str3 str4

但是如果我有一个字符串: str1||str3|str4输出将是str1 str3 str4 。 我正在寻找的输出是str1 null/blank str3 str4

我希望这是有道理的。

 string createText = "srt1||str3|str4"; string[] txt = createText.Split(new[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries); if (File.Exists(path)) { //Console.WriteLine("{0} already exists.", path); File.Delete(path); // write to file. using (StreamWriter sw = new StreamWriter(path, true, Encoding.Unicode)) { sw.WriteLine("str1:{0}",txt[0]); sw.WriteLine("str2:{0}",txt[1]); sw.WriteLine("str3:{0}",txt[2]); sw.WriteLine("str4:{0}",txt[3]); } } 

产量

 str1:str1 str2:str3 str3:str4 str4:"blank" 

那不是我想要的。 这就是我想编码的内容:

 str1:str1 str2:"blank" str3:str3 str4:str4 

最简单的方法是使用量化 :

 using System.Text.RegularExpressions; ... String [] parts = new Regex("[|]+").split("str1|str2|str3|srt4"); 

“+”摆脱它。

来自维基百科 :“+”加号表示存在一个或多个前面的元素。 例如,ab + c匹配“abc”,“abbc”,“abbbc”等,但不匹配“ac”。

Form msdn:Regex.Split方法类似于String.Split方法,但Split除了将字符串拆分为由正则表达式而不是一组字符确定的分隔符。 输入字符串尽可能多地拆分。 如果在输入字符串中找不到pattern,则返回值包含一个元素,其值为原始输入字符串。

可以通过以下方式完成其他愿望

 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program{ static void Main(string[] args){ String[] parts = "str1||str2|str3".Replace(@"||", "|\"blank\"|").Split(@"|"); foreach (string s in parts) Console.WriteLine(s); } } } 

试试这个:

 str.Split('|') 

如果没有传递StringSplitOptions.RemoveEmptyEntries ,它将按您的意愿工作。

这应该是诀窍……

 string s = "str1||str3|str4"; string[] parts = s.Split('|'); 

尝试这样的事情:

 string result = "str1||str3|srt4"; List parsedResult = result.Split('|').Select(x => string.IsNullOrEmpty(x) ? "null" : x).ToList(); 

当使用Split()时,数组中的结果字符串将为空(不为null)。 在这个例子中,我测试了它并用实际的单词null替换它,这样你就可以看到如何替换另一个值。