2012-03-30 15 views
-1

私はC#でコードを持っており、売り手の名前でラベルを印刷する必要がありますが、問題があります。 ラベルのすべての行は20文字になります。この名前を付けるのに2行あります。C#で文字列を操作する

私は、カットワードなしで2行に売り手の名前を手配する必要があります。例えば

- 名前:JOSE MAURICIO BERTOLOTO MENDES

ライン1:JOSE MAURICIO

回線2:BERTOLOTO MENDES

誰かが私はこれを行う方法を知っていますか? おかげ


EDIT:助けを

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); 

ありがとう:答えに基づいて、私はこのコードをimplemente!

+1

2行目が> 20文字の場合はどうなりますか? –

+0

左または右に揃えてあります。 –

+0

James:2行目が> 20文字であれば余分な文字をカットしなければなりません。 – JohnyMoraes

答えて

5

文字列をstring.Split()を使用して単語に分割して、行に追加するのに十分な長さの文字列を追加するだけです。

また、文字数は使用しませんが、代わりにGraphics.MeasureString()を使用します。

0

私はあなたが特殊文字を使うことができるとは思っていませんが、 '\ n'(引用符なし) そのbasicllyは改行を表しています。したがって、例えば:ジョーズモリシオBERTOLOTOメンデスはジョゼモリシオとなります。\ nベルトロートメンデス。

2

フルネームを個々の部分に分割することができます。

var names = fullname.Split(' '); 

文字列[]を指定します。そこから、各文字列の長さを見ることで数学を行うことができます。

1

ここに論理があります。

String.splitを使用して名前を配列に分割します。配列内の文字列を繰り返し、その行を20文字未満で並び替える。再帰関数は良い考えです! 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文字より長いとき、私はのために開いたケースを残しここ

は簡単な例です。また、この例では、名前が2行に収まらない場合はN番目の行に進みます。