拆分并追加一个字符串

本文关键字:一个 字符串 追加 拆分 | 更新日期: 2023-09-27 18:07:33

现在我取一个字符串,像"112233 112233 112233 112233",我把它分割成一个数组,像这样:

string text = ProcessString("112233 112233");
string[] dates = text.Split(' ');

效果很好,但是我想用string builder来构建我的字符串这样它们最终会像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();
}

它可以工作,但它不匹配预期的输出:

11-22-33 
11-22-33

我当前的输出是:

11-22-33- 
1-12-23-3
-11-22-33

我能做些什么来解决这个问题?

拆分并追加一个字符串

您可以简单地通过迭代和收集字符串的大小为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

那么,对于你的完整问题,你可以这样做:

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

regex:

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

我能为您提供另一种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));
}

那么代码就更简单了:

var newDates = dates.Select(d => string.Join("-", d.SplitInParts(2)));
string result = string.Join(" ", newDates);

我有这样的方法:

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

您可以使用Array.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);