2012-03-30 8 views
-1

Ich habe einen Code in C# und muss ein Etikett mit dem Namen des Verkäufers drucken, aber ich habe ein Problem. Jede Zeile in der Bezeichnung comport 20 Buchstaben und ich habe 2 Zeilen, um diesen Namen zu setzen.Manipulierende Zeichenfolge in C#

Ich muss den Namen des Verkäufers in den 2 Zeilen, ohne Kürzungswörter ordnen.

Zum Beispiel - Name: JOSE MAURICIO BERTOLOTO MENDES

Line1: JOSE MAURICIO

Netz2: BERTOLOTO MENDES

jemand wissen, wie ich das tun? Dank


EDIT: Basierend auf den Antworten, i implemente diesen Code:

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

Danke für die Hilfe!

+1

Und was wäre, wenn die zweite Zeile> 20 Zeichen wäre? –

+0

links oder rechts gerechtfertigt :) –

+0

James: Mit der zweiten Zeile wäre> 20 Zeichen, muss ich die zusätzlichen Buchstaben zu schneiden. – JohnyMoraes

Antwort

5

Sie könnten die Zeichenfolge einfach in Wörter unter Verwendung string.Split() teilen und dann zu jedem hinzufügen, solange es klein genug ist, um der Zeile hinzuzufügen.

Ich würde auch nicht die Anzahl der Zeichen verwenden, sondern stattdessen Graphics.MeasureString() verwenden.

0

Ich bin mir nicht sicher, aber ich denke, Sie können ein Sonderzeichen verwenden: '\ n' (ohne die Anführungszeichen) Sein Basiclly steht für neue Zeile. So zum Beispiel: JOSE MAURICIO BERTOLOTO MENDES wird JOSE MAURICIO \ n BERTOLOTO MENDES.

2

Sie können den vollständigen Namen in einzelne Teile aufteilen.

var names = fullname.Split(' '); 

Welche gibt Ihnen eine Zeichenfolge []. Von dort können Sie die Mathematik machen, indem Sie die Länge jeder Saite betrachten.

1

Hier ist die Logik.

Verwenden Sie String.split, um den Namen in ein Array aufzuteilen. Iterieren Sie über die Zeichenfolgen im Array, concat sie in eine Zeile, während die Zeile weniger als 20 Zeichen ist. Eine rekursive Funktion wäre eine gute Idee! Wenn Sie mehr als zwei Zeilen haben, löschen Sie den Rest der Namen, die ihn übertrugen.

2

Die Idee ist, dass Sie alle Teile des Namens anhängen möchten, bis Sie Ihre 20-Zeichen-Grenze für das nächste Token erreichen oder überschreiten. Wenn das passiert, füge eine neue Zeile mit diesem Token hinzu und setze so lange weiter, bis du das Zeichenlimit erneut erreichst.

Hier ist ein kurzes Beispiel:

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

Hinweis: Ich habe den Fall für offen gelassen, wenn ein Abschnitt des Namens, ohne Leerzeichen, ist länger als 20 Zeichen. Außerdem wird dieses Beispiel bis zur N-ten Zeile fortgesetzt, wenn der Name nicht auf zwei Zeilen passt.