关于字符串对齐的问题
今天碰到一个打印时的模版格式的问题:
要打印出来的字符串对不齐,开始是想法是正确的,但没做出来,呵呵,经验有限。
后到网上找到一个,试了下,不错,能达到想要的效果。
字符串中含有字母,数字,汉字等不统一的字符。函数如下:
1 /// <summary>
2 /// 把一个“unicode字符串”格式化为全角字符占2个位置的“普通字符串”
3 /// width小于0 表示左对齐,右边填空格
4 /// width大于0 表示右对齐,左边填空格
5 /// </summary>
6 /// <param name="s"></param>
7 /// <param name="width"></param>
8 /// <returns></returns>
9 public static string StrFormat(string s, int width)
10 {
11 Encoding code = Encoding.GetEncoding("GB18030");
12
13 byte[] bs = code.GetBytes(s);
14
15 bool leftAlign = (width < 0 ? true : false);
16
17 if (width < 0)
18 width = -width;
19
20 if (bs.Length >= width)
21 return s;
22
23 if (leftAlign)
24 return s.PadRight(width - bs.Length + s.Length);
25
26 return s.PadLeft(width - bs.Length + s.Length);
27 }
28
1对齐格式一:如下:
2一票通UL初始化卡
3一票通1K初始化卡
4一卡通S70非记名成人卡
5一卡通CPU非记名成人卡
6一卡通S50非记名成人卡
7一卡通S70记名成人卡
8一卡通S70定值卡
9一卡通S70福利卡
10一卡通S70纪念卡
11一卡通S70老人卡
12一卡通S70大钱包扣款测试专用卡
13一卡通S70学生卡1
14一卡通S70学生卡2
15一卡通S70学生卡3
16一卡通S70定期卡1
17一卡通S70定期卡2
18一卡通S70地铁员工卡
19一卡通S70计次卡1
20一卡通S70计次卡2
21一卡通S70奥运专用卡1
22一卡通S70奥运专用卡2
23
24对齐格式二,如下:
25
26 一票通UL初始化卡
27 一票通1K初始化卡
28 一卡通S70非记名成人卡
29 一卡通CPU非记名成人卡
30 一卡通S50非记名成人卡
31 一卡通S70记名成人卡
32 一卡通S70定值卡
33 一卡通S70福利卡
34 一卡通S70纪念卡
35 一卡通S70老人卡
36一卡通S70大钱包扣款测试专用卡
37 一卡通S70学生卡1
38 一卡通S70学生卡2
39 一卡通S70学生卡3
40 一卡通S70定期卡1
41 一卡通S70定期卡2
42 一卡通S70地铁员工卡
43 一卡通S70计次卡1
44 一卡通S70计次卡2
45 一卡通S70奥运专用卡1
46 一卡通S70奥运专用卡2