分开一个长串

Fel*_*tto 3 .net c#

A具有以下输入字符串:

string input =
   "Ta005000000000000000000Tb001700000000000000000Sa005000000000000000000" +
   "Sb002500000000000000000F     00000000000000000I     00000000000000000N" +
   "     00000000000000000FS    00000000000000000IS    00000000000000000NS" +
   "    00000000000000000";
Run Code Online (Sandbox Code Playgroud)

我需要将这个字符串分成几部分,但内容变化很大.

必须将此字符串放入如下列表中:

[0] "Ta005000000000000000000"
[1] "Tb001700000000000000000"
[2] "Sa005000000000000000000"
[3] "Sb002500000000000000000"
[4] "00000000000000000I"
[5] "00000000000000000N"
[6] "0000000000000000FS"
[7] "0000000000000000IS"
[8] "0000000000000000NS"
[9] "000000000000000000"
Run Code Online (Sandbox Code Playgroud)

在这种情况下我唯一知道的是字符串的最大长度是23.因此,在这个例子中,我需要分离字符串返回的fisrt部分的'T'或'S'.或者,如果没有出现这些字符,则用空格分隔(它发生在我的字符串返回的最后一部分).我这样做了:

var linq = test.Split(new[] { 'T', 'S', ' ', '{', '}' }, StringSplitOptions.RemoveEmptyEntries).ToList();
Run Code Online (Sandbox Code Playgroud)

我的"test"是一个包含返回字符的StrintBuilder.通过这样做,我可以将我的列表分开,但在这种情况下,我丢失了一个非常重要的信息,即"T"和"S".

嗯,不知道它是否清楚,但它似乎是如此简单,给我一个巨大的头痛.

Obs:其他问题是,例如:"0000000000000000FS",在这部分字符串中我需要将"FS"保持在一起.

感谢您的关注,

Mat*_*ten 6

拆分删除拆分字符.只需将这些替换为如下所示插入空格,然后在空格字符处拆分:

var linq = myRates.Replace("T"," T").Replace("S"," S").Split(new[] { ' ', '{', '}' }, StringSplitOptions.RemoveEmptyEntries).ToList();
Run Code Online (Sandbox Code Playgroud)

编辑

这个规则非常复杂.也许这解决了你的问题.

string input =
   "Ta005000000000000000000Tb001700000000000000000Sa005000000000000000000" +
   "Sb002500000000000000000F     00000000000000000I     00000000000000000" +
   "N     00000000000000000FS    00000000000000000IS    00000000000000000" +
   "NS    00000000000000000";
Run Code Online (Sandbox Code Playgroud)

第一步:拆分''

string[] spaceSplit = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);
Run Code Online (Sandbox Code Playgroud)

现在spaceSplit看起来像这样:

[0] "Ta005000000000000000000Tb001700000000000000000Sa005000000000000000000Sb002500000000000000000F"
[1] "00000000000000000I"
[2] "00000000000000000N"
[3] "0000000000000000FS"
[4] "0000000000000000IS"
[5] "0000000000000000NS"
[6] "000000000000000000"
Run Code Online (Sandbox Code Playgroud)

现在,如果长度超过23个字符,则将每行分成'T'和'S'

List<string> temp = new List<string>();
foreach(string s in spaceSplit)
  if (s.Length>23)
    temp.AddRange(s.Replace("T", " T").Replace("S", " S").Split(' '));
  else
    temp.Add(s);
Run Code Online (Sandbox Code Playgroud)

temp.ToArray() 产量

[0] "Ta005000000000000000000"
[1] "Tb001700000000000000000"
[2] "Sa005000000000000000000"
[3] "Sb002500000000000000000F"
[4] "00000000000000000I"
[5] "00000000000000000N"
[6] "0000000000000000FS"
[7] "0000000000000000IS"
[8] "0000000000000000NS"
[9] "000000000000000000"

var linq = (from s in temp select s.Substring(0,23)).ToList();
Run Code Online (Sandbox Code Playgroud)

etvoilà,linq是你想要的阵列.但对于其他输入组合,这种"算法"可能会破裂.

  • 取决于后来维护代码的人是否知道正则表达式:)我会比正则表达式更好地理解这段代码. (2认同)