我在C#中有一个代码,并且必须打印一个带有卖家名字的标签,但我有一个问题。 标签中的每一行都包含20个字母,我有2行代表这个名字。
我需要在两行中排列卖家的名字,而不是切词。
例如 - 姓名:JOSE MAURICIO BERTOLOTO MENDES
第1行:JOSE MAURICIO
第2行:BERTOLOTO MENDES
有人知道我是怎么做到的吗? 感谢编辑:根据答案,我实现了这段代码:
string[] SellerPrint = Seller.Split(' ');
Line1 = "";
Line2 = "";
foreach (string name in SellerPrint )
{
if (Line1.Length <= 20)
{
if ((Line1 + name).Length <= 20)
Line1 += (Line1.Length == 0) ? name : " " + name;
else
break;
}
}
Line2 = (Seller.Replace(Line1, "").Length <= 20) ? Seller.Replace(Line1+ " ", "") : Seller.Replace(Line1+ " ", "").Remove(20);
感谢您的帮助!
答案 0 :(得分:5)
您可以使用string.Split()
简单地将字符串拆分为单词,然后添加到每个单词中,只要它足够小就可以添加到该行中。
我也不会使用字符数,而是使用Graphics.MeasureString()
。
答案 1 :(得分:2)
您可以将全名拆分为其各个部分。
var names = fullname.Split(' ');
哪个会给你一个字符串[]。从那里你可以通过查看每个字符串的长度来进行数学计算。
答案 2 :(得分:2)
您的想法是,您希望附加名称的所有部分,直到您达到或超过下一个令牌的20个字符限制。当发生这种情况时,添加一个带有该标记的新行并继续追加,直到再次达到字符限制为止。
这是一个简单的例子:
public static string FormatName(string name)
{
const int MaxLength = 20;
if (string.IsNullOrEmpty(name))
throw new ArgumentNullException("name");
if (name.Length <= MaxLength)
return name;
string[] tokens = name.Split(' ');
if (tokens.Length == 0)
return name; //hyphen the name?
StringBuilder sb = new StringBuilder(name.Length);
int len = 0;
foreach (string token in tokens)
{
if (token.Length + len < MaxLength)
{
sb.Append(token + " ");
len += token.Length;
}
else
{
sb.Append(Environment.NewLine + token + " ");
len = 0;
}
}
return sb.ToString();
}
注意:当名称的一部分没有空格超过20个字符时,我将案例打开了。此外,如果名称不适合两行,此示例将继续到第N行。
答案 3 :(得分:1)
这是逻辑。
使用String.split将名称拆分为数组。迭代数组中的字符串,将它们连成一行,而该行少于20个字符。递归函数是个好主意!如果您的行数超过两行,则删除其余的名称。
答案 4 :(得分:0)
我不确定,但我认为你可以使用一个特殊字符:&#39; \ n&#39; (没有报价) 它基本上代表新线。例如:JOSE MAURICIO BERTOLOTO MENDES将成为JOSE MAURICIO \ n BERTOLOTO MENDES。