拆分并追加一个字符串?

时间:2015-08-12 13:16:32

标签: c# string

现在我接受一个像"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();
}

它有效,但它与预期的输出不匹配:

11-22-33 
11-22-33

我目前的输出是:

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

我该怎么做才能解决这个问题?

5 个答案:

答案 0 :(得分:2)

您只需通过迭代和收集字符串的size-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);
}

答案 1 :(得分:1)

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

var newDates = dates.Select(d => Regex.Replace(d, ".{2}", "$0-").Trim('-'));
string result = string.Join(" ", newDates);

但我更喜欢this extension因为它可读且可重复使用:

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

答案 2 :(得分:1)

正则表达式怎么样:

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

答案 3 :(得分:0)

我有这种方法:

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

答案 4 :(得分:0)

您可以使用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);
相关问题