如何将Hyphens附加到每个第n个位置的字符串?

时间:2014-01-29 17:09:07

标签: c# asp.net .net

我从其他应用程序中收到"123456""abcdef""123abc"等字符串。 我需要格式化"123-456","abc-def""123-abc"等字符串。字符串的长度也可以变化,就像我们可以有一串长度为30的字符串。如果选择第3个位置,则应在每个第3个字符后插入连字符。

ex:输入“abcdxy123z” 输出“ abc-dxy-123-z ”为第3位。

如果我们选择第二个位置,那么输出将是

“AB-CD-XY-12-3z”

我尝试使用String.Format(“{0:#### - #### - #### - ####}”,Convert.ToInt64(“1234567891234567”))但是如果我得到了字母数字字符串,它不起作用。

3 个答案:

答案 0 :(得分:7)

你可以使用一点Linq,就像这样:

string Hyphenate(string str, int pos) {
    return String.Join("-",
        str.Select((c, i) => new { c, i })
           .GroupBy(x => x.i / pos)
           .Select(g => String.Join("", g.Select(x => x.c))));
}

或者像这样:

string Hyphenate(string str, int pos) {
    return String.Join("-",
        Enumerable.Range(0, (str.Length - 1) / pos + 1)
            .Select(i => str.Substring(i * pos, Math.Min(str.Length - i * pos, pos))));
}

或者您可以使用正则表达式,如下所示:

string Hyphenate(string str, int pos) {
    return String.Join("-", Regex.Split(str, @"(.{" + pos + "})")
                                 .Where(s => s.Length > 0));
}

或者像这样:

string Hyphenate(string str, int pos) {
    return String.Join("-", Regex.Split(str, @"(?<=\G.{" + pos + "})(?!$)"));
}

所有这些方法都会返回相同的结果:

Console.WriteLine(Hyphenate("abcdxy123z", 2)); // ab-cd-xy-12-3z
Console.WriteLine(Hyphenate("abcdxy123z", 3)); // abc-dxy-123-z
Console.WriteLine(Hyphenate("abcdxy123z", 4)); // abcd-xy12-3z

答案 1 :(得分:3)

使用StringBuilder:

string input = "12345678"; //could be any length
int position = 3; //could be any other number
StringBuilder sb = new StringBuilder();

for (int i = 0; i < input.Length; i++)
{
    if (i % position == 0){
        sb.Append('-');
    }
    sb.Append(input[i]);
}
string formattedString = sb.ToString();

答案 2 :(得分:3)

for语句的力量:

string str = "12345667889";
int loc = 3;

for(int ins=loc; ins < str.Length; ins+=loc+1)
   str = str.Insert(ins,"-");

提供123-456-678-89

作为一项功能:

string dashIt(string str,int loc)
{
  if (loc < 1) return str;

  StringBuilder work = new StringBuilder(str);

  for(int ins=loc; ins < work.Length; ins+=loc+1)
     work.Insert(ins,"-");

  return work.ToString();
}