c#中的手动字符串分割

本文关键字:字符串 分割 | 更新日期: 2023-09-27 18:02:40

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

Some text - 04.09.1996 - 40-18

我想把它分成三个子字符串:Some text, 04.09.199640-18

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

c#中的手动字符串分割

你应该在-:

 .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

使用这个重载的字符串分割只得到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());

我会警惕出现在"Some text"中的"-"或"-",因为我假设您对它作为占位符感兴趣。如果你确定"某些文本"不会包含"-",那么这里的其他答案就很好,简单且易读。否则我们需要依赖已知的字符串常量。在我看来,最后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];

在目前的情况下,你可以使用分割和额外的空间,如

string.Split(" - ")

就"良好实践"而言,我不推荐这个解决方案。

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

 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动画片"