子串在每4个字符后添加可用空间

时间:2014-11-26 11:07:53

标签: c#

public static string ToIbanFormat(this string value)
        {
            if (value.Length > 16)
            {
                string iban = value.Substring(0, 4) + " " + 
                              value.Substring(4, 4) + " " + 
                              value.Substring(8, 4) + " " + 
                              value.Substring(12, 4) + " " +
                              value.Substring(16);

                return iban;
            }

            return value;
        }
如果有更多的字符我可以在每个4个字符后使用空格,我可以以某种方式动态地做它。

例如,我的代码不适用于: GR16 0110 1250 0000 0001 2300 695

我不想添加另一个if。我可以动态地检查长度然后将其子串吗?

4 个答案:

答案 0 :(得分:3)

您可以用该字符和空格替换每第4个字符:

return value
    .Select((x, i) => (i + 1) % 4 == 0 ? x + " " : x.ToString())
    .Aggregate((x, y) => x + y);

答案 1 :(得分:3)

Regex.Replace(value, ".{4}", "$0 ").Trim()应该可以解决问题。

答案 2 :(得分:1)

这有效:

var text = "GR1601101250000000012300695";

var result = String.Join(" ",
    text
        .ToCharArray()
        .Buffer(4)
        .Select(x => new string(x.ToArray())));

但是Buffer要求你NuGet" Ix-Main"来自Microsoft Reactive Framework Team。

我个人喜欢RegEx方法,但我认为这更具可读性,因此更易于维护。

答案 3 :(得分:1)

String str = "GR1601101250000000012300695";
StringBuilder result=new StringBuilder();
for(int i=0;i<str.Length;i++)
{
  if ((i+1) % 4 == 0)
    result.Append(str[i] + " ");
  else
    result.Append(str[i]);
}

result = GR16 0110 1250 0000 0001 2300 695