.NET String.Format 메서드를 사용하면 고정 길이 문자열 내에서 고정 위치에 문자열을 배치 할 수 있습니다.
"문자열은 여기에 간다" "문자열이 여기에 간다" "문자열은 여기에 간다"
이것은 .NET을 사용하여 어떻게 수행됩니까?
편집 -Format / PadLeft / PadRight를 죽이려고했습니다. 그들은 일하지 않는다. 이유를 모르겠습니다. 나는 이것을하기 위해 내 자신의 기능을 작성했다.
편집 -실수로 형식 지정자에서 쉼표 대신 콜론을 사용했습니다. “{0,20}”이어야합니다.
모든 우수하고 정답에 감사드립니다.
답변
이렇게하면 요청한 문자열이 정확하게 제공됩니다.
string s = "String goes here";
string lineAlignedRight = String.Format("{0,27}", s);
string lineAlignedCenter = String.Format("{0,-27}",
String.Format("{0," + ((27 + s.Length) / 2).ToString() + "}", s));
string lineAlignedLeft = String.Format("{0,-27}", s);
답변
첫 번째와 마지막은 다음 구문을 사용하여 가능합니다.
String.Format("{0,20}", "String goes here");
String.Format("{0,-20}", "String goes here");
답변
Visual Studio 2015부터 Interpolated Strings를 사용 하여이 작업을 수행 할 수도 있습니다 (컴파일러 트릭이므로 대상으로하는 .net 프레임 워크의 버전은 중요하지 않습니다).
string value = "String goes here";
string txt1 = $"{value,20}";
string txt2 = $"{value,-20}";
답변
PadLeft
과 ( 가) 표시되었습니다 PadRight
. 이것은 누락을 채 웁니다 PadCenter
.
public static class StringUtils
{
public static string PadCenter(this string s, int width, char c)
{
if (s == null || width <= s.Length) return s;
int padding = width - s.Length;
return s.PadLeft(s.Length + padding / 2, c).PadRight(width, c);
}
}
자기 자신에 대한 참고 사항 : “CV를 업데이트하는 것을 잊지 마십시오.”언젠가 Joel Coehoorn의 코드를 수정했습니다! ” ;-D-서지
답변
이 시도:
"String goes here".PadLeft(20,' ');
"String goes here".PadRight(20,' ');
가운데는 줄의 길이를 얻고 필요한 문자로 왼쪽 및 오른쪽을 수행하십시오.
int len = "String goes here".Length;
int whites = len /2;
"String goes here".PadRight(len + whites,' ').PadLeft(len + whites,' ');
답변
토론 해 주셔서 감사합니다.이 방법도 작동합니다 (VB).
Public Function StringCentering(ByVal s As String, ByVal desiredLength As Integer) As String
If s.Length >= desiredLength Then Return s
Dim firstpad As Integer = (s.Length + desiredLength) / 2
Return s.PadLeft(firstpad).PadRight(desiredLength)
End Function
- StringCentering () 은 두 개의 입력 값을 가져 와서 형식화 된 문자열을 반환합니다.
- s 길이가 deisredLength 보다 크거나 같으면 함수는 원래 문자열을 반환합니다.
- 길이 때 의이 보다 작은 desiredLength , 그것은 양쪽 끝을 패딩됩니다.
- 문자 간격이 정수이고 반 공백이 없기 때문에 공백이 고르지 않을 수 있습니다. 이 구현에서, 더 큰 분할은 선단으로 간다.
- 이 함수에는 PadLeft () 및 PadRight () 로 인해 .NET Framework가 필요합니다 .
- 함수의 마지막 줄에서 바인딩은 왼쪽에서 오른쪽으로 이루어 지므로 firstpad 다음에 원하는 길이 패드 가 적용됩니다 .
C # 버전은 다음과 같습니다.
public string StringCentering(string s, int desiredLength)
{
if (s.Length >= desiredLength) return s;
int firstpad = (s.Length + desiredLength) / 2;
return s.PadLeft(firstpad).PadRight(desiredLength);
}
이해를 돕기 위해 정수 변수 firstpad 가 사용됩니다. s.PadLeft (firstpad) 는 (올바른 수) 선행 공백을 적용합니다. 가장 오른쪽에있는 PadRight (desiredLength) 는 후행 공백을 적용하여 바인딩 마감이 낮습니다.
답변
다음은 Joel Coehoorn의 답변, Oliver의 편집 및 shaunmartin의 의견에서 영감을 얻은 VB.NET 버전입니다.
<Extension()>
Public Function PadCenter(ByVal [string] As String, ByVal width As Integer, ByVal c As Char) As String
If [string] Is Nothing Then [string] = String.Empty
If (width <= [string].Length) Then Return [string]
Dim padding = width - [string].Length
Return [string].PadLeft([string].Length + (padding \ 2), c).PadRight(width, c)
End Function
<Extension()>
Public Function PadCenter(ByVal [string] As String, ByVal width As Integer) As String
If [string] Is Nothing Then [string] = String.Empty
If (width <= [string].Length) Then Return [string]
Dim padding = width - [string].Length
Return [string].PadLeft([string].Length + (padding \ 2)).PadRight(width)
End Function
이것은 공용 모듈 (C #과 약간 다른 VB.NET에서 확장을 수행하는 방식) 내에서 문자열 확장으로 설정됩니다. 약간의 변화는 null 문자열을 빈 문자열로 취급하고 너비 값으로 빈 문자열을 채 웁니다 (특정 요구 사항을 충족 함). 잘하면 이것이 필요한 사람을 위해 쉽게 C #으로 변환되기를 바랍니다. 위에서 언급 한 답변, 수정 사항 및 의견을 참조 할 수있는 더 좋은 방법이 있다면 내 게시물에 영감을 주었고 알려주세요 의견을 남겨주세요 (아직 충분한 담당자가 없을 수도 있음).