如何根据特定长度将字符串分割成块?

问题描述 投票:0回答:2

我有以下字符串:

 string input = "A123   B12345 777"

数组形式的预期结果如下,

    A123   B12345 777

但实际结果是

   A123   B12345

在下面的代码中,子字符串没有获取最后一个值。最后一个值的大小只有三个字符。

    SplitString(input, 7)

    private  IEnumerable<string> SplitString(string str, int size)
    {
        return Enumerable.Range(0, str.Length / size)
            .Select(i => str.Substring(i * size, size));
    }
c# substring
2个回答
2
投票

您的代码来自将字符串分割成一定大小的块,只有当输入字符串的大小是

size
的精确倍数时才有效。

整数除法向下舍入,因此需要将其向上取整。然后您可能会尝试使用比字符串其余部分更长的子字符串。所以:

IEnumerable<string> SplitString(string str, int size) => 
    Enumerable.Range(0, (int)Math.Ceiling(str.Length / (float)size))
        .Select(i => str.Substring(i * size, Math.Min(str.Length - (i * size), size)));

自 .NET 6 起,您还可以 使用

.Chunk()
,如 在此处解释

var result = str
   .Chunk(size)
   .Select(x => new string(x));

0
投票

LINQ 有一个方便的 Chunk 方法来对这样的东西进行分组。

IEnumerable<string> SplitString(string str, int size)
{
    return str.Chunk(size).Select(c => new string(c));
}
string input = "A123   B12345 777";
var result = SplitString(input, 7);
Console.WriteLine(JsonSerializer.Serialize(result));
// Result: ["A123   ","B12345 ","777"]
© www.soinside.com 2019 - 2024. All rights reserved.