在特定位置拆分字符串

Lim*_*Lim 6 .net c# string

我在这里遇到了一个小问题,我正在寻找一种更好的方法来分割字符串.例如,我收到一个看起来像这样的字符串.

0000JHASDF+4429901234ALEXANDER
Run Code Online (Sandbox Code Playgroud)

我知道字符串是用它构建的模式,我有一个像这样的数组.

4,5,4,7,9
0000 - JHASDF - +442 - 9901234 - ALEXANDER
Run Code Online (Sandbox Code Playgroud)

使用String MID命令很容易将整个内容拆分,但是当我收到包含8000 - 10000个数据集的文件时,它似乎很慢.那么任何建议我如何能够更快地将数据放入List或字符串数​​组中?如果有人知道如何使用RegEx这样做.

Luk*_*keH 10

var lengths = new[] { 4, 6, 4, 7, 9 };
var parts = new string[lengths.Length];

// if you're not using .NET4 or above then use ReadAllLines rather than ReadLines
foreach (string line in File.ReadLines("YourFile.txt"))
{
    int startPos = 0;
    for (int i = 0; i < lengths.Length; i++)
    {
        parts[i] = line.Substring(startPos, lengths[i]);
        startPos += lengths[i];
    }

    // do something with "parts" before moving on to the next line
}
Run Code Online (Sandbox Code Playgroud)

  • @George:你认为这在这里会引人注目吗?如果你能告诉我一个基准,数组和列表之间的差异没有被文件I/O掩埋,我会感到惊讶. (5认同)
  • @George:如果这会产生任何显着的性能差异,我会感到惊讶,并且这会以使代码的可读性降低为代价(不可否认只是稍微不那么简单).我不认为它真的值得投票:如果OP认为这是一个值得制作的微优化,那么他们可以自由地做到这一点. (2认同)

Car*_*rra 6

是不是一个VB方法?

string firstPart = string.Substring(0, 4);
string secondPart = string.Substring(4, 5);
string thirdPart = string.Substring(9, 4);
//...
Run Code Online (Sandbox Code Playgroud)


Ind*_*lta 1

正则表达式分割方法是一种可能性,但由于字符串中没有特定的分隔符,所以我怀疑它会有任何用处,而且不太可能更快。

String.Substring也是一种可能性。你可以这样使用它:var myFirstString = fullString.Substring(0, 4)