拆分并追加一个字符串
本文关键字:一个 字符串 追加 拆分 | 更新日期: 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);