C# 拆分并附加字符串?

C# 拆分并附加字符串?,c#,string,C#,String,现在我接收一个字符串,像这样“112233 112233 112233 112233 112233”,并将其拆分为如下数组: string text = ProcessString("112233 112233"); string[] dates = text.Split(' '); 这非常有效,但我想使用字符串生成器来构建我的字符串,这样它们最终会像11-22-33 11-22-33等 所以我试过这个: static string ProcessString(string input) {

现在我接收一个字符串,像这样
“112233 112233 112233 112233 112233”
,并将其拆分为如下数组:

string text = ProcessString("112233 112233");
string[] dates = text.Split(' ');
这非常有效,但我想使用字符串生成器来构建我的字符串,这样它们最终会像
11-22-33 11-22-33

所以我试过这个:

static string ProcessString(string input)
{
    StringBuilder buffer = new StringBuilder(input.Length * 3 / 2);

    for (int i = 0; i < input.Length; i++)
    {
        if ((i > 0) & (i % 2 == 0))
            buffer.Append("-");
        buffer.Append(input[i]);
    }
    return buffer.ToString();
}
我当前的输出是:


如何解决此问题?

您只需迭代并收集字符串的大小为2的子字符串,然后通过
-
字符将它们连接起来,即可处理单个字符串:

string s = "112233";

List<string> parts = new List<string>(s.Length / 2);
for (int i = 0; i < s.Length; i += 2)
    parts.Add(s.Substring(i, 2));

Console.WriteLine(string.Join("-", parts)); // 11-22-33
string s=“112233”;
列表零件=新列表(s.Length/2);
对于(int i=0;i
因此,对于您的全部问题,您可以这样做:

static string ProcessString(string input)
{
    var segments = input.Split(' ').Select(s =>
    {
        List<string> parts = new List<string>(s.Length / 2);
        for (int i = 0; i < s.Length; i += 2)
            parts.Add(s.Substring(i, 2));
        return string.Join("-", parts);
    });

    return string.Join(" ", segments);
}
静态字符串处理字符串(字符串输入)
{
变量段=输入。拆分(“”)。选择(s=>
{
列表零件=新列表(s.Length/2);
对于(int i=0;i
您只需迭代并收集字符串的大小为2的子字符串,然后通过
-
字符将它们连接起来,即可处理单个字符串:

string s = "112233";

List<string> parts = new List<string>(s.Length / 2);
for (int i = 0; i < s.Length; i += 2)
    parts.Add(s.Substring(i, 2));

Console.WriteLine(string.Join("-", parts)); // 11-22-33
string s=“112233”;
列表零件=新列表(s.Length/2);
对于(int i=0;i
因此,对于您的全部问题,您可以这样做:

static string ProcessString(string input)
{
    var segments = input.Split(' ').Select(s =>
    {
        List<string> parts = new List<string>(s.Length / 2);
        for (int i = 0; i < s.Length; i += 2)
            parts.Add(s.Substring(i, 2));
        return string.Join("-", parts);
    });

    return string.Join(" ", segments);
}
静态字符串处理字符串(字符串输入)
{
变量段=输入。拆分(“”)。选择(s=>
{
列表零件=新列表(s.Length/2);
对于(int i=0;i
我可以为您提供另一种Regex+LINQ方法吗

var newDates = dates.Select(d => Regex.Replace(d, ".{2}", "$0-").Trim('-'));
string result = string.Join(" ", newDates);
但我更喜欢它,因为它可读且可重复使用:

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

我可以为您提供另一种Regex+LINQ方法吗

var newDates = dates.Select(d => Regex.Replace(d, ".{2}", "$0-").Trim('-'));
string result = string.Join(" ", newDates);
但我更喜欢它,因为它可读且可重复使用:

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));
}
regex呢

string s = "112233";
string pattern = @"\d{2}\B";
string result = Regex.Replace(s, pattern, m => m.Value + "-");
regex呢

string s = "112233";
string pattern = @"\d{2}\B";
string result = Regex.Replace(s, pattern, m => m.Value + "-");
我有以下方法:

       string input = "112233 445566 778899 101010";
       string[] dates = input.Split(' ');

       foreach (string date in dates){
           Console.WriteLine(date);
           string result = date.Substring(0, 2) + '-' + date.Substring(2, 2) + "-" + date.Substring(4, 2);
           Console.WriteLine(result);
       }
我有以下方法:

       string input = "112233 445566 778899 101010";
       string[] dates = input.Split(' ');

       foreach (string date in dates){
           Console.WriteLine(date);
           string result = date.Substring(0, 2) + '-' + date.Substring(2, 2) + "-" + date.Substring(4, 2);
           Console.WriteLine(result);
       }

您可以使用数组。ConvertAll

string str = "112233 112233 112233 112233";
string[] dates = str.Split();

dates = Array.ConvertAll(dates, s => s.Insert(4, "-").Insert(2, "-"));

foreach (var s in dates)
    Console.WriteLine(s);

您可以使用数组。ConvertAll

string str = "112233 112233 112233 112233";
string[] dates = str.Split();

dates = Array.ConvertAll(dates, s => s.Insert(4, "-").Insert(2, "-"));

foreach (var s in dates)
    Console.WriteLine(s);

如果只有三个元素,则将其从for循环中取出并使用string.Format。Format(“{0}-{1}-{2}”,element1,element2,element3)为什么不先在空格上拆分,然后插入破折号?string text=“112233 112233 112233 112233 112233”;string[]dates=text.Split(“”)。选择(x=>x.Substring(1,2)+“-”+x.Substring(2,2)+“-”+x.Substring(4,2)).ToArray()@jdweng这真的应该是一个答案而不是一个注释。@IanP这3个字符串就在那里,因为我想测试,我不想硬编码这些值。如果只有3个元素,请将其从for循环中取出,并使用string.Format。Format(“{0}-{1}-{2}”,element1,element2,element3)为什么不先在空格上拆分,然后插入破折号?string text=“112233 112233 112233 112233 112233”;string[]dates=text.Split(“”)。选择(x=>x.Substring(1,2)+“-”+x.Substring(2,2)+“-”+x.Substring(4,2)).ToArray()@jdweng这真的应该是一个答案而不是一个注释。@IanP这3个字符串就在那里,因为我想测试,我不想硬编码这些值。我喜欢这个解决方案;它也适用于原始字符串
“112233 112233”
;它也适用于原始字符串
“112233 112233”