.NET 고정 공백으로 문자열 형식 지정
.NET 문자열을 수행합니다.형식 메서드를 사용하면 고정 길이 문자열 내의 고정 위치에 문자열을 배치할 수 있습니다.
문자열 위치"문자열 위치 ""끈은 여기에"
.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);
Visual Studio 2015부터는 인터폴된 문자열로도 이 작업을 수행할 수 있습니다(컴파일러 트릭이므로 대상 .net 프레임워크의 버전은 상관 없음).
string value = "String goes here";
string txt1 = $"{value,20}";
string txt2 = $"{value,-20}";
첫 번째와 마지막은 적어도 다음 구문을 사용하여 가능합니다.
String.Format("{0,20}", "String goes here");
String.Format("{0,-20}", "String goes here");
당신은 보여졌습니다.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를 업데이트하는 것을 잊지 마세요: "어느 날, 나는 조엘 코호른의 코드까지 고쳤습니다!";-D-Serge.
사용해 보십시오.
"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의 길이가 disiredLength 이상이면 함수는 원래 문자열을 반환합니다.
- s의 길이가 원하는 길이보다 작으면 양쪽 끝에 패딩 처리됩니다.
- 문자 간격이 정수이고 절반의 공백이 없기 때문에 공간이 불균등하게 분할될 수 있습니다.이 구현에서는 더 큰 분할이 선행단에 전달됩니다.
- PadLeft() 및 PadRight()로 인해 이 함수에는 .NET Framework가 필요합니다.
- 기능의 마지막 줄에서 바인딩은 왼쪽에서 오른쪽으로 수행되므로 첫 번째 패드가 적용되고 그 다음에 원하는 길이 패드가 적용됩니다.
다음은 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);
}
이해를 돕기 위해 정수 변수 첫 번째 패드가 사용됩니다.PadLeft(첫 번째 패드)는 올바른 수의 선행 공백을 적용합니다.가장 오른쪽에 있는 PadRight(원하는 길이)는 후행 공백을 적용하여 바인딩 마감을 낮춥니다.
Joel Coehoon의 답변, 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
이는 공용 모듈(VB.NET에서 확장을 수행하는 방식으로 C#과는 조금 다름) 내에서 문자열 확장으로 설정됩니다.약간의 변경 사항은 null 문자열을 빈 문자열로 처리하고 빈 문자열을 너비 값으로 패딩한다는 것입니다(특정 요구 사항을 충족함).이것이 필요한 사람이라면 누구나 쉽게 C#으로 변환되기를 바랍니다.제 게시물에 영감을 준 위에서 언급한 답변, 편집 및 댓글을 더 잘 참조할 수 있는 방법이 있다면 알려주시면 제가 그렇게 하겠습니다. 저는 글을 올리는 것이 비교적 익숙하지 않고, 댓글을 남길 방법을 찾을 수 없었습니다(아직 충분한 답변이 없을 수도 있습니다).
당신이 원하는 코드프로젝트 기사를 올렸습니다.
참고: 간접 너비 및 스타일 형식 지정은 C# 방법을 참조하십시오.
기본적으로 String과 같은 역할을 하는 것은 FormatEx 메서드입니다.중앙 맞춤 수정자를 허용하지 않는 한 형식입니다.
FormatEx("{0,c10}", value);
10자 너비 필드에 varArgs[0] 값의 중심을 맞춥니다. 추가 패딩 공간이 필요한 경우 오른쪽으로 기울입니다.
FormatEx("{0,c-10}", value);
10자 너비 필드에 varArgs[0] 값의 중심을 맞춥니다. 추가 패딩 공간이 필요한 경우 왼쪽으로 기울입니다.
편집: 내부적으로 Joel's PadCenter와 일부 구문 분석을 결합하여 String에 대한 호출을 위한 varArgs를 재구성합니다.원하는 작업을 수행하는 형식입니다.
-제스
일정한 길이의 문자열에서 고정된 지점에 문자열을 배치하는 다음과 같은 것을 원하는 것처럼 보입니다.
Dim totallength As Integer = 100
Dim leftbuffer as Integer = 5
Dim mystring As String = "string goes here"
Dim Formatted_String as String = mystring.PadLeft(leftbuffer + mystring.Length, "-") + String.Empty.PadRight(totallength - (mystring.Length + leftbuffer), "-")
내 string.length + left buffer가 전체 길이를 초과하면 문제가 발생합니다.
/// <summary>
/// Returns a string With count chars Left or Right value
/// </summary>
/// <param name="val"></param>
/// <param name="count"></param>
/// <param name="space"></param>
/// <param name="right"></param>
/// <returns></returns>
public static string Formating(object val, int count, char space = ' ', bool right = false)
{
var value = val.ToString();
for (int i = 0; i < count - value.Length; i++) value = right ? value + space : space + value;
return value;
}
언급URL : https://stackoverflow.com/questions/644017/net-format-a-string-with-fixed-spaces
'IT' 카테고리의 다른 글
Git 업데이트 하위 모듈 재귀 (0) | 2023.05.23 |
---|---|
어셈블리 이름을 가져오는 중 (0) | 2023.05.23 |
Windows 10에서 Conda 명령이 인식되지 않음 (0) | 2023.05.23 |
아포스트로피(단일 따옴표)가 포함된 값을 삽입하는 방법은 무엇입니까? (0) | 2023.05.23 |
List. 스레드 안전 추가() (0) | 2023.05.23 |