c# - 分开一个长字符串

标签 c# .net

A 有以下输入字符串:

string input =
   "Ta005000000000000000000Tb001700000000000000000Sa005000000000000000000" +
   "Sb002500000000000000000F     00000000000000000I     00000000000000000N" +
   "     00000000000000000FS    00000000000000000IS    00000000000000000NS" +
   "    00000000000000000";

我需要将这个字符串分成几个部分,但是内容差异很大。

必须让这个字符串变成像这样的列表:

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

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

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

我的“测试”是一个包含那些返回字符的 StrintBuilder。通过这样做,我可以分离我的列表,但在这种情况下我丢失了一个对我来说非常重要的信息,即“T”和“S”。

好吧,不知道是否清楚,但它似乎很简单,让我很头疼。

观察:另一个问题是,例如:“0000000000000000FS”,在这部分字符串中,我需要将“FS”一起维护。

感谢您的关注,

最佳答案

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

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

编辑

这条规则很复杂。也许这可以解决您的问题。

string input =
   "Ta005000000000000000000Tb001700000000000000000Sa005000000000000000000" +
   "Sb002500000000000000000F     00000000000000000I     00000000000000000" +
   "N     00000000000000000FS    00000000000000000IS    00000000000000000" +
   "NS    00000000000000000";

第一步:在''处分割

string[] spaceSplit = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);

现在 spaceSplit 看起来像这样:

[0] "Ta005000000000000000000Tb001700000000000000000Sa005000000000000000000Sb002500000000000000000F"
[1] "00000000000000000I"
[2] "00000000000000000N"
[3] "0000000000000000FS"
[4] "0000000000000000IS"
[5] "0000000000000000NS"
[6] "000000000000000000"

如果每行超过 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);

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();

等瞧,linq 就是你想要的数组。但对于其他输入组合,此“算法”可能会失效。

关于c# - 分开一个长字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8909928/

相关文章:

c# - 找到最内层异常的正确方法?

c# - 在页面 PreInit 事件中访问 Asp.NET 控件

c# - 按扩展名的内容类型

c# - Dapper 中的映射实体

c# - 扩展 WCF 服务及其自动生成的客户端服务引用

.net - SQL Server 存储过程引发多个错误

c# - c# 中的 Web 浏览器不显示最新的 css 信息

c# - 根据类型反序列化json字符串

c# - C++和C#中指针和函数参数的等价性

.net - .net 中长时间运行的数据库操作