2012-03-30 2 views
-1

나는 C# 코드가 있고 판매자의 이름으로 레이블을 인쇄해야하지만 문제가있다. 레이블의 모든 줄은 20 글자로 나뉘며이 줄을 2 줄 표시합니다.C#에서 문자열 조작하기

줄 바꿈없이 2 줄에 판매자의 이름을 정렬해야합니다.

예를 들어 - 이름 : 호세 마우 BERTOLOTO 멘데스

호선 : 호세 마우

라인 2 : 나는이 작업을 수행하는 방법을 BERTOLOTO 멘데스

누군가가 알아? 감사


편집 : 도움을

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

두 번째 줄이> 20 문자 일 경우 어떻게해야합니까? –

+0

왼쪽 또는 오른쪽 맞춤 : –

+0

제임스 : 두 번째 줄은> 20 자일 것입니다. 나는 여분의 글자를 잘라야합니다. – JohnyMoraes

답변

5

문자열을 string.Split()을 사용하여 단어로 분할 한 다음 줄에 추가 할 수있을만큼 작은 길이로 각 단어를 추가 할 수 있습니다.

또한 문자 수는 사용하지 않지만 대신 Graphics.MeasureString()을 사용합니다.

0

잘 모르겠지만 특수 문자를 사용할 수 있다고 생각합니다. '\ n'(따옴표 제외) 기본 줄은 새 줄을 의미합니다. 그래서 예를 들면 : JOSE MAURICIO BERTOLOTO MENDES는 JOSE MAURICIO가 될 것입니다. \ n BERTOLOTO MENDES.

2

개별 이름으로 전체 이름을 나눌 수 있습니다.

var names = fullname.Split(' '); 

그러면 문자열 []이 나옵니다. 거기에서 각 문자열의 길이를보고 수학을 할 수 있습니다.

1

여기에 논리가 있습니다.

String.split을 사용하여 이름을 배열로 분할합니다. 줄의 길이가 20 문자 미만인 동안 배열의 문자열을 반복하고 줄로 연결하십시오. 재귀 함수는 좋은 생각입니다! 두 줄 이상일 때 나머지 줄을 버리십시오.

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 번째 행으로 계속됩니다.