c#中的手动字符串分割
本文关键字:字符串 分割 | 更新日期: 2023-09-27 18:02:40
在我的代码中,我试图操作一个字符串:
Some text - 04.09.1996 - 40-18
我想把它分成三个子字符串:Some text
, 04.09.1996
和40-18
。
当我使用带有连字符作为分隔符的Split
方法时,返回值是由四个字符串组成的数组:Some text
, 04.09.1996
, 40
和18
。我怎样才能使这段代码像上面描述的那样工作?
你应该在-
:
.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动画片"