【问题标题】:Manual string split in C#在 C# 中手动拆分字符串
【发布时间】:2016-08-16 11:55:51
【问题描述】:

在我的代码中,我试图操作一个字符串:

Some text - 04.09.1996 - 40-18

我想将其拆分为三个子字符串:Some text04.09.199640-18

当我使用带有连字符作为分隔符的Split 方法时,返回值是一个由四个字符串组成的数组:Some text04.09.19964018。我怎样才能使这段代码像上面描述的那样工作?

【问题讨论】:

  • Some text 可以包含“-”吗?例如,您的输入字符串可以看起来像这样ABC - DEF - 04.09.1996 - 40-18吗?

标签: c# regex string split


【解决方案1】:

你应该用-周围的空格分开:

 .Split(new[] {" - "}, StringSplitOptions.RemoveEmptyEntries);

C# demo

var res = "Some text - 04.09.1996 - 40-18".Split(new[] {" - "}, StringSplitOptions.RemoveEmptyEntries);
foreach (var s in res)
    Console.WriteLine(s);

结果:

Some text
04.09.1996
40-18

【讨论】:

【解决方案2】:

使用this overload of string split 只能得到 3 个部分:

var s = "Some text - 04.09.1996 - 40-18";
var parts = s.Split(new[] { '-' }, 3);

我假设您也想修剪空格:

var parts = s.Split(new[] { '-' }, 3)
    .Select(p => p.Trim());

【讨论】:

  • 这里的第二个选项是唯一可以在格式不固定的情况下正常工作的答案,即如果连字符周围的空格数可以变化。
【解决方案3】:

我会警惕出现在“某些文本”中的“-”或“-”,因为我假设您对此作为占位符感兴趣。如果您确定“某些文本”将不包含“-”,那么这里的其他答案都很好,简单易读。否则我们需要依赖我们知道的关于字符串的常量。在我看来,不变的是最后 3 个连字符。所以我会尝试拆分“-”并将最后一对重新组合在一起,就像

string input = "Some text - 04.09.1996 - 40-18";
string[] foo = input.Split(new[] { " - " }, StringSplitOptions.RemoveEmptyEntries);
int length = foo.Length;
string[] bar = new string[3];

//put "some text" back together
for(int i=0; i< length - 3;i++)
{
   bar[0] += foo[i];
}

bar[1] = foo[length - 3];
bar[2] = foo[length - 2] + "-" + foo[length - 1];

【讨论】:

    【解决方案4】:

    在当前情况下,您可以使用带有额外空间的拆分,例如

    string.Split(" - ")
    

    就“良好实践”而言,不能推荐此解决方案。

    【讨论】:

    • 请使用代码格式,不要引用代码块。
    • 谢谢 DavidG,会做的
    • 同样作为一般规则,如果您的答案与其他人的相同,请不要发布,但要支持其他答案:) 如果您有要添加的内容,评论或编辑建议总是欢迎
    • 我很想知道为什么这不被认为是好的做法,以及什么会使它变得更好。
    • 这不是一个好习惯,因为用“空白”空格分割是非常幼稚的。如您所见,在上面的示例中,您可以有“34-35”或“text -”以及许多其他示例。在这种情况下,此解决方案有效,在其他情况下则不会,并且一段时间后,当出现问题时,很难找到问题。所以,我想说,最佳解决方案在上面的示例中,您删除空格并将字符串拆分为 3 个部分。附言我和上面的人同时写了我的解决方案。
    【解决方案5】:

    我将字符串中的字符序列 '--------------------' 替换为特殊字符“&”,如下所示。然后使用特殊字符“&”分割

     string str = "Hello, my- name --------------------  is Philip J. Fry -------------------- and i like cartoons".Replace("--------------------","&");
      string[] ss=str.Split('&');
      string result=ss[0] + "," + ss[1]+ "," +ss[2];
    

    然后输出字符串看起来像“Hello, my-name, is Philip J. Fry, and i like cartoons”

    【讨论】:

    • 这能回答问题吗?
    猜你喜欢
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多