IT

.NET 고정 공백으로 문자열 형식 지정

itgroup 2023. 5. 23. 21:47
반응형

.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
  1. StringCentering()은 두 개의 입력 값을 사용하며 형식이 지정된 문자열을 반환합니다.
  2. s의 길이가 disiredLength 이상이면 함수는 원래 문자열을 반환합니다.
  3. s의 길이가 원하는 길이보다 작으면 양쪽 끝에 패딩 처리됩니다.
  4. 문자 간격이 정수이고 절반의 공백이 없기 때문에 공간이 불균등하게 분할될 수 있습니다.이 구현에서는 더 큰 분할이 선행단에 전달됩니다.
  5. PadLeft() 및 PadRight()로 인해 이 함수에는 .NET Framework가 필요합니다.
  6. 기능의 마지막 줄에서 바인딩은 왼쪽에서 오른쪽으로 수행되므로 첫 번째 패드가 적용되고 그 다음에 원하는 길이 패드가 적용됩니다.

다음은 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

반응형