我想把一帮字符串补空白来对齐? 求个思路? 
例如:老师
金老师
我是老师
我是金老师
我是数学老师
我是生物学老师
我是生物学的老师
我是生物学的金老师补空白后想要这样的结果老                       师
金           老          师
我      是       老      师
我    是     金    老    师
我   是   数   学   老   师
我  是   生  物  学  老  师
我 是  生 物  学  的  老 师
我  是 生 物 学 的 金 老 师
也就是中间补空格来左右对齐
最少两个字,最多也10个字左右

解决方案 »

  1.   


                strs.PadLeft();
                strs.PadRight();
                string.Format();看看这三个方法
      

  2.   


       private string FormatTitleString(string name)
            {
                int length = name.Length;
                switch (length)
                {
                    case 2:
                        name = name.Substring(0, 1) + "                " + name.Substring(1);
                        break;
                    case 3:
                        name = name.Substring(0, 1) + "       " + name.Substring(1, 1) + "       " + name.Substring(2);
                        break;
                    case 4:
                        name = name.Substring(0, 1) + "    " + name.Substring(1, 1) + "    " + name.Substring(2, 1) + "    " + name.Substring(3);
                        break;
                    case 6:
                        name = name.Substring(0, 1) + " " + name.Substring(1, 1) + " " + name.Substring(2, 1) + " " + name.Substring(3, 1) + " " + name.Substring(4, 1) + " " + name.Substring(5);
                        break;
                    case 7:
                        name = name.Substring(0, 1) + " " + name.Substring(1, 1) + " " + name.Substring(2, 1) + " " + name.Substring(3, 1) + " " + name.Substring(4, 1) + " " + name.Substring(5, 1) + " " + name.Substring(6);
                        break;
                    case 8:
                        name = name.Substring(0, 1) + " " + name.Substring(1, 1) + " " + name.Substring(2, 1) + " " + name.Substring(3, 1) + " " + name.Substring(4);
                        break;
                    case 9:
                        name = name.Substring(0, 6) + " " + name.Substring(6, 1) + " " + name.Substring(7, 1) + " "  + name.Substring(8);
                        break;
                }
                return name;
            }
    但不想这样实现太傻。。
    请问,
    strs.PadLeft();
    strs.PadRight();
    string.Format();怎么实现?
      

  3.   

    既然不超过10个字符,你就把每个都写成一个模板,然后,串拆成 char,直接输出就行了。省得那么多计算。
      

  4.   


                string[] str = { "老师", "金老师", "我是老师", "我是金老师", "我是数学老师", "我是生物学老师", "我是生物学的老师", "我是生物学的金老师" };
                int length = 30;
                int index = 0;
                string space;            for (int i = 0; i < str.Length; i++)
                {
                    while (str[i].Length <= length)
                    {
                        str[i]= Regex.Replace(str[i], @"[\u4e00-\u9fa5]", "$0 ");
                        str[i] = str[i].Trim();
                        index++;
                    }                space = string.Empty;
                    for (int c = 0; c < index; c++) space += " ";                while (str[i].Length > length)
                    {
                        str[i] = str[i].Remove(str[i].IndexOf(space), 1);
                    }                Console.WriteLine(str[i]);                index = 0;
                }
    算法笨了点,不过能实现要求
      

  5.   


    谢谢。。
    但好像
    while (str[i].Length > length)
                    {
                        str[i] = str[i].Remove(str[i].IndexOf(space), 1);
                    }这里删除空白的时候一直删除前边的空格。。
    比如,
    我      是      老      师==〉结果:我 是      老      师
    因为str[i].Length > length
    删除的是 我和是中间的空格怎么让均衡的删除空格?
      

  6.   

    是均衡的删除空格啊
    第一次删除 “我和是”之间的空格,如果还是超出,就是删除 “是和老”之间的空格了
    因为删除了“我和是”之间的空格后,再查找IndexOf(space),匹配的是“是和老”之间的空格了
      

  7.   


                string[] str = { "老师", "金老师", "我是老师", "我是金老师", "我是数学老师", "我是生物学老师", "我是生物学的老师", "我是生物学的金老师" };
                int length = 30;
                string space;            for (int i = 0; i < str.Length; i++)
                {
                    space = string.Empty;                while (str[i].Length <= length)
                    {
                        str[i] = Regex.Replace(str[i], @"[\u4e00-\u9fa5]", "$0 ");
                        str[i] = str[i].Trim();                    space += " ";
                    }                while (str[i].Length > length)
                    {
                        str[i] = str[i].Remove(str[i].IndexOf(space), 1);
                    }                Console.WriteLine(str[i]);
                }
    稍微修改了下,把space的for循环放入第一个while循环中了
    我测试过,都没啥问题啊
      

  8.   

    用全角空格实现的,通吃所有字体。        static string MyPad(string str, int len)
            {
                if (str.Length >= len) return str;
                List<char> ret = new List<char>( new string(' ', len));
                float step = (float)(len-1)/(str.Length-1);
                for (int i = 0; i < str.Length; i++)
                {
                    float offset = step * i;
                    int pos;
                    if (offset - (int)offset > 0.5)
                    {
                        pos = (int)offset+1;
                    }
                    else
                    {
                        pos = (int)offset;
                    }
                    ret[pos] = str[i];
                }
                return new string(ret.ToArray());
            }        static void Main(string[] args)
            {
                string data = @"老师
    金老师
    我是老师
    我是金老师
    我是数学老师
    我是生物学老师
    我是生物学的老师
    我是生物学的金老师";
                StringReader r = new StringReader(data);
                for (string line = r.ReadLine(); line != null; line = r.ReadLine())
                {
                    Console.WriteLine(MyPad(line, 18));
                }        }
    老                师
    金       老        师
    我     是    老     师
    我   是   金    老   师
    我  是   数  学   老  师
    我  是  生 物  学  老  师
    我 是  生 物  学 的  老 师
    我 是 生 物 学  的 金 老 师
    Press any key to continue . . .
      

  9.   

    int length = 30;这个是啥概念,是随便定义的还是最长字符串的长度呢?
    我觉得无扩展性
      

  10.   

    按照你的把int length = 30;所以没有特别大的问题,你把这个长度改成14左右就问题很明显了。。
    length = 30的话,我的画面里放不下请指教
      

  11.   

    顺便在这个贴里回复一下。。这个分也都一起给的。。http://topic.csdn.net/u/20110423/15/3e05e0c0-32e0-4761-a8f7-e382b7bc45b0.html18楼的问题解决得话,就结贴了。。
    谢谢
      

  12.   


                string[] str = { "老师", "金老师", "我是老师", "我是金老师", "我是数学老师", "我是生物学老师", "我是生物学的老师", "我是生物学的金老师" };
                int length = 14;
                string space;
                bool first = true;            for (int i = 0; i < str.Length; i++)
                {
                    space = string.Empty;                while (str[i].Length <= length)
                    {
                        str[i] = Regex.Replace(str[i], @"[\u4e00-\u9fa5]", "$0 ");
                        str[i] = str[i].Trim();                    space += " ";
                    }                while (str[i].Length > length)
                    {
                        if (first)
                        {
                            str[i] = str[i].Remove(str[i].IndexOf(space), 1);
                            first = !first;
                        }
                        else
                        {
                            str[i] = str[i].Remove(str[i].LastIndexOf(space), 1);
                            first = !first;
                        }
                    }                Console.WriteLine(str[i]);
                }
    这下应该好了吧,改成前后轮流删除了