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。我可以动态地检查长度然后将其子串吗?
答案 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