C#字符串拆分

时间:2010-09-16 03:30:54

标签: c# string

如果我有一个字符串: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

4 个答案:

答案 0 :(得分:9)

试试这个:

str.Split('|')

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

答案 1 :(得分:8)

这应该可以解决问题...

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

答案 2 :(得分:4)

最简单的方法是使用Quantification

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

“+”摆脱了它。

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

表单msdn: The 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);
        }
    }
}

答案 3 :(得分:1)

尝试这样的事情:

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

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