我有以下字符串:
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));
}
您的代码来自将字符串分割成一定大小的块,只有当输入字符串的大小是
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));
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"]