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

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

我有以下字符串

 string input = "A123   B12345 777"

预期结果为数组,如下所示,

    A123   B12345 777

但实际结果是

   A123   B12345 

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

    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个回答
3
投票

你的代码来自于将字符串分割成一定大小的块,我无法理解一个被设计彻底破坏的答案怎么能得到 300+ 的分数。仅当输入字符串的大小恰好是

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

1
投票

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.