我想把一帮字符串补空白来对齐? 求个思路?
例如:老师
金老师
我是老师
我是金老师
我是数学老师
我是生物学老师
我是生物学的老师
我是生物学的金老师补空白后想要这样的结果老 师
金 老 师
我 是 老 师
我 是 金 老 师
我 是 数 学 老 师
我 是 生 物 学 老 师
我 是 生 物 学 的 老 师
我 是 生 物 学 的 金 老 师
也就是中间补空格来左右对齐
最少两个字,最多也10个字左右
例如:老师
金老师
我是老师
我是金老师
我是数学老师
我是生物学老师
我是生物学的老师
我是生物学的金老师补空白后想要这样的结果老 师
金 老 师
我 是 老 师
我 是 金 老 师
我 是 数 学 老 师
我 是 生 物 学 老 师
我 是 生 物 学 的 老 师
我 是 生 物 学 的 金 老 师
也就是中间补空格来左右对齐
最少两个字,最多也10个字左右
strs.PadLeft();
strs.PadRight();
string.Format();看看这三个方法
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();怎么实现?
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;
}
算法笨了点,不过能实现要求
谢谢。。
但好像
while (str[i].Length > length)
{
str[i] = str[i].Remove(str[i].IndexOf(space), 1);
}这里删除空白的时候一直删除前边的空格。。
比如,
我 是 老 师==〉结果:我 是 老 师
因为str[i].Length > length
删除的是 我和是中间的空格怎么让均衡的删除空格?
第一次删除 “我和是”之间的空格,如果还是超出,就是删除 “是和老”之间的空格了
因为删除了“我和是”之间的空格后,再查找IndexOf(space),匹配的是“是和老”之间的空格了
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循环中了
我测试过,都没啥问题啊
{
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 . . .
我觉得无扩展性
length = 30的话,我的画面里放不下请指教
谢谢
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]);
}
这下应该好了吧,改成前后轮流删除了