现在我接受一个像"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
我该怎么做才能解决这个问题?
答案 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);