Rog*_*oid 61 .net c# string split
我需要将一个数字分成偶数部分,例如:
32427237需要成为324 272 37
103092501需要成为103 092 501
我相信我可以接下来的数字,但我确信有一种更有效的方式,因为我不想错过这些数字中的字符 - 数字本身可以是任意长度所以如果数字是1234567890我希望它分成这些部分123 456 789 0
我已经看过其他语言的例子,比如Python等,但我不太了解它们将它们转换为C# - 循环通过字符然后在第三个获取前一个然后该索引来获取字符串的部分可能做好这份工作,但我愿意接受如何更好地完成这项工作的建议.
Mar*_*age 115
如果您必须在代码中的许多地方执行此操作,您可以创建一个花哨的扩展方法:
static class StringExtensions {
public static IEnumerable<String> SplitInParts(this String s, Int32 partLength) {
if (s == null)
throw new ArgumentNullException("s");
if (partLength <= 0)
throw new ArgumentException("Part length has to be positive.", "partLength");
for (var i = 0; i < s.Length; i += partLength)
yield return s.Substring(i, Math.Min(partLength, s.Length - i));
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
var parts = "32427237".SplitInParts(3);
Console.WriteLine(String.Join(" ", parts));
Run Code Online (Sandbox Code Playgroud)
输出是324 272 37所希望的.
你可以使用一个简单的for循环在每个第n个位置插入空格:
string input = "12345678";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < input.Length; i++)
{
if (i % 3 == 0)
sb.Append(' ');
sb.Append(input[i]);
}
string formatted = sb.ToString();
Run Code Online (Sandbox Code Playgroud)
LINQ规则:
var input = "1234567890";
var partSize = 3;
var output = input.ToCharArray()
.BufferWithCount(partSize)
.Select(c => new String(c.ToArray()));
Run Code Online (Sandbox Code Playgroud)
更新:
string input = "1234567890";
double partSize = 3;
int k = 0;
var output = input
.ToLookup(c => Math.Floor(k++ / partSize))
.Select(e => new String(e.ToArray()));
Run Code Online (Sandbox Code Playgroud)
一种执行此操作的非常简单的方法(不是最有效的方法,但是不会比最有效的方法慢几个数量级)。
public static List<string> GetChunks(string value, int chunkSize)
{
List<string> triplets = new List<string>();
while (value.Length > chunkSize)
{
triplets.Add(value.Substring(0, chunkSize));
value = value.Substring(chunkSize);
}
if (value != "")
triplets.Add(value);
return triplets;
}
Run Code Online (Sandbox Code Playgroud)
继承人
public static List<string> GetChunkss(string value, int chunkSize)
{
List<string> triplets = new List<string>();
for(int i = 0; i < value.Length; i += chunkSize)
if(i + chunkSize > value.Length)
triplets.Add(value.Substring(i));
else
triplets.Add(value.Substring(i, chunkSize));
return triplets;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您知道整个字符串的长度可以被部分大小整除,则使用:
var whole = "32427237!";
var partSize = 3;
var parts = Enumerable.Range(0, whole.Length / partSize)
.Select(i => whole.Substring(i * partSize, partSize));
Run Code Online (Sandbox Code Playgroud)
但是,如果整个字符串末尾可能有一个小数块,那么您需要更复杂一点:
var whole = "32427237";
var partSize = 3;
var parts = Enumerable.Range(0, (whole.Length + partSize - 1) / partSize)
.Select(i => whole.Substring(i * partSize, Math.Min(whole.Length - i * partSize, partSize)));
Run Code Online (Sandbox Code Playgroud)
在这些示例中,部件将是 IEnumerable,但如果您需要 string[] 或 List<string> 值,则可以在末尾添加 .ToArray() 或 .ToList() 。
这已经晚了五年,但是:
int n = 3;
string originalString = "32427237";
string splitString = string.Join(string.Empty,originalString.Select((x, i) => i > 0 && i % n == 0 ? string.Format(" {0}", x) : x.ToString()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76020 次 |
| 最近记录: |