수색…


소개

Format 메서드는 개체를 특정 문자열 표현으로 결합하는 문자열을 만드는 데 사용되는 System.String 클래스의 오버로드 집합입니다. 이 정보는 .NET Framework의 String.Format , 다양한 WriteLine 메서드 및 다른 메서드에 적용 할 수 있습니다.

통사론

  • string.Format (문자열 형식, params 객체 [] args)
  • string.Format (IFormatProvider 공급자, 문자열 형식, params 개체 [] args)
  • $ "string {text} blablabla"// C # 6 이후

매개 변수

매개 변수 세부
체재 args 를 문자열로 결합하는 방법을 정의하는 복합 형식 문자열입니다.
args 문자열로 결합 할 객체 시퀀스입니다. params 인수를 사용하므로 쉼표로 구분 된 인수 목록이나 실제 객체 배열을 사용할 수 있습니다.
공급자 객체를 문자열로 포맷하는 방법 모음입니다. 일반적인 값에는 CultureInfo.InvariantCultureCultureInfo.CurrentCulture가 포함됩니다.

비고

노트:

  • String.Format() 은 예외를 throw하지 않고 null 인수를 처리합니다.
  • args 매개 변수를 하나, 둘 또는 세 개의 개체 매개 변수로 대체하는 오버로드가 있습니다.

String.Format이 프레임 워크에 '포함 된'곳

간접적으로 String.Format 을 사용할 수있는 몇 가지 장소가 있습니다. 비밀은 서명 string format, params object[] args 오버로드를 찾는 것입니다 (예 :

Console.WriteLine(String.Format("{0} - {1}", name, value));

짧은 버전으로 대체 가능 :

Console.WriteLine("{0} - {1}", name, value);

String.Format 을 사용하는 다른 메소드들도 있습니다 :

Debug.WriteLine(); // and Print()
StringBuilder.AppendFormat();

사용자 정의 숫자 형식 사용

NumberFormatInfo 는 정수 및 부동 소수점 숫자의 서식을 지정하는 데 사용할 수 있습니다.

// invariantResult is "1,234,567.89"
var invarianResult = string.Format(CultureInfo.InvariantCulture, "{0:#,###,##}", 1234567.89);

// NumberFormatInfo is one of classes that implement IFormatProvider
var customProvider = new NumberFormatInfo
{
    NumberDecimalSeparator = "_NS_", // will be used instead of ','
    NumberGroupSeparator = "_GS_", // will be used instead of '.'
};

// customResult is "1_GS_234_GS_567_NS_89"
var customResult = string.Format(customProvider, "{0:#,###.##}", 1234567.89);

사용자 지정 형식 공급자 만들기

public class CustomFormat : IFormatProvider, ICustomFormatter
{
    public string Format(string format, object arg, IFormatProvider formatProvider)
    {
        if (!this.Equals(formatProvider))
        {
            return null;
        }

        if (format == "Reverse")
        {
            return String.Join("", arg.ToString().Reverse());
        }

        return arg.ToString();
    }

    public object GetFormat(Type formatType)
    {
        return formatType==typeof(ICustomFormatter) ? this:null;
    }
}

용법:

String.Format(new CustomFormat(), "-> {0:Reverse} <-", "Hello World");

산출:

-> dlroW olleH <-

좌우 정렬, 패드 맞추기

중괄호의 두 번째 값은 대체 문자열의 길이를 나타냅니다. 두 번째 값을 양수 또는 음수로 조정하면 문자열의 정렬을 변경할 수 있습니다.

string.Format("LEFT:  string: ->{0,-5}<- int: ->{1,-5}<-", "abc", 123);
string.Format("RIGHT: string: ->{0,5}<- int: ->{1,5}<-", "abc", 123);

산출:

LEFT:  string: ->abc  <- int: ->123  <-
RIGHT: string: ->  abc<- int: ->  123<-

숫자 형식

// Integral types as hex
string.Format("Hexadecimal: byte2: {0:x2}; byte4: {0:X4}; char: {1:x2}", 123, (int)'A');

// Integers with thousand separators
string.Format("Integer, thousand sep.: {0:#,#}; fixed length: >{0,10:#,#}<", 1234567);

// Integer with leading zeroes
string.Format("Integer, leading zeroes: {0:00}; ", 1);

// Decimals
string.Format("Decimal, fixed precision: {0:0.000}; as percents: {0:0.00%}", 0.12);

산출:

Hexadecimal: byte2: 7b; byte4: 007B; char: 41
Integer, thousand sep.: 1,234,567; fixed length: > 1,234,567<
Integer, leading zeroes: 01; 
Decimal, fixed precision: 0.120; as percents: 12.00%

통화 서식

"c"(또는 통화) 형식 지정자는 숫자를 통화 금액을 나타내는 문자열로 변환합니다.

string.Format("{0:c}", 112.236677) // $112.23 - defaults to system

정도

기본값은 2입니다. c1, c2, c3 등을 사용하여 정밀도를 제어합니다.

string.Format("{0:C1}", 112.236677) //$112.2
string.Format("{0:C3}", 112.236677) //$112.237
string.Format("{0:C4}", 112.236677) //$112.2367
string.Format("{0:C9}", 112.236677) //$112.236677000

통화 기호

  1. CultureInfo 인스턴스를 전달하여 사용자 지정 culture 심볼을 사용합니다.
string.Format(new CultureInfo("en-US"), "{0:c}", 112.236677); //$112.24
string.Format(new CultureInfo("de-DE"), "{0:c}", 112.236677); //112,24 €
string.Format(new CultureInfo("hi-IN"), "{0:c}", 112.236677); //₹ 112.24
  1. 모든 문자열을 통화 기호로 사용하십시오. NumberFormatInfo 를 사용하면 통화 기호를 사용자 정의 할 수 있습니다.
NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;
nfi = (NumberFormatInfo) nfi.Clone();
nfi.CurrencySymbol = "?";
string.Format(nfi, "{0:C}", 112.236677); //?112.24
nfi.CurrencySymbol = "?%^&";
string.Format(nfi, "{0:C}", 112.236677); //?%^&112.24

통화 기호의 위치

양수 값에는 CurrencyPositivePattern 을, 음수 값에는 CurrencyNegativePattern 을 사용하십시오.

NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;        
nfi.CurrencyPositivePattern = 0;
string.Format(nfi, "{0:C}", 112.236677); //$112.24 - default
nfi.CurrencyPositivePattern = 1;
string.Format(nfi, "{0:C}", 112.236677); //112.24$
nfi.CurrencyPositivePattern = 2;
string.Format(nfi, "{0:C}", 112.236677); //$ 112.24
nfi.CurrencyPositivePattern = 3; 
string.Format(nfi, "{0:C}", 112.236677); //112.24 $

부정적인 패턴 사용은 양성 패턴과 동일합니다. 더 많은 사용 사례가 원래 링크를 참조하십시오.

사용자 정의 소수 구분 기호

NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;        
nfi.CurrencyPositivePattern = 0;
nfi.CurrencyDecimalSeparator = "..";
string.Format(nfi, "{0:C}", 112.236677); //$112..24

C # 6.0부터

6.0

C # 6.0부터 String.Format 대신에 문자열 보간법을 사용할 수 있습니다.

string name = "John";
string lastname = "Doe";
Console.WriteLine($"Hello {name} {lastname}!");

John Doe여보세요!

이에 대한 더 많은 예제는 C # 6.0 기능을 참조하십시오. 문자열 보간 .

String.Format () 표현식 안에서 중괄호를 이스케이프 처리합니다.

string outsidetext = "I am outside of bracket";
string.Format("{{I am in brackets!}} {0}", outsidetext);

//Outputs "{I am in brackets!} I am outside of bracket"

날짜 형식 지정

DateTime date = new DateTime(2016, 07, 06, 18, 30, 14);
// Format: year, month, day hours, minutes, seconds

Console.Write(String.Format("{0:dd}",date)); 

//Format by Culture info
String.Format(new System.Globalization.CultureInfo("mn-MN"),"{0:dddd}",date);
6.0
Console.Write($"{date:ddd}");

출력 :

06
Лхагва
06
지정자 의미 견본 결과
날짜 {0:d} 2014 년 7 월 6 일
DD 제로 패딩 데이 {0:dd} 06
ddd 짧은 요일 이름 {0:ddd}
dddd 종일 이름 {0:dddd} 수요일
긴 데이트 {0:D} 2016 년 7 월 6 일 수요일
에프 전체 날짜 및 시간, 짧음 {0:f} 2016 년 7 월 6 일 수요일 오후 6:30
ff 두 번째 분수, 2 자리 {0:ff} 20
fff 두 번째 분수, 3 자리 {0:fff} 201
ffff 두 번째 분수, 4 자리 {0:ffff} 2016 년
에프 긴 날짜와 시간 {0:F} 2016 년 7 월 6 일 수요일 오후 6시 30 분 14 초
기본 날짜 및 시간 {0:g} 2014 년 7 월 6 일 오후 6시 30 분
gg 연대 {0:gg} 광고
hh 시간 (2 자리, 12H) {0:hh} 06
HH 시간 (2 자리, 24H) {0:HH} 18
월 및 일 {0:M} 7 월 6 일
mm 제로 패딩 처리 된 분 {0:mm} 30
MM 제로 패딩 달 {0:MM} 07
MMM 3 자리 월 이름 {0:MMM} 7 월
MMMM 전체 월 이름 {0:MMMM} 칠월
SS {0:ss} 14
아르 자형 RFC1123 날짜 {0:r} 2016 년 7 월 6 일, 수요일, 18:30:14 GMT
에스 정렬 가능한 날짜 문자열 {0:s} 2016-07-06T18 : 30 : 14
짧은 시간 {0:t} 오후 6:30
장기 {0:T} 오후 6:30:14
tt 오전 오후 {0:tt} 오후
범용 정렬 가능 로컬 시간 {0:u} 2016-07-06 18 : 30 : 14Z
유니버설 GMT {0:U} 2016 년 7 월 6 일 수요일 오전 9:30:14
와이 월 및 연도 {0:Y} 2016 년 7 월
2 자리 연도 {0:yy} 16
yyyy 4 자리 연도 {0:yyyy} 2016 년
zz 2 자리 시간대 오프셋 {0:zz} +09
쿨쿨 전체 표준 시간대 오프셋 {0:zzz} +09 : 00

ToString ()

ToString () 메서드는 모든 참조 객체 유형에 있습니다. 이는 ToString () 메서드가있는 Object에서 파생되는 모든 참조 유형 때문입니다. 개체 기본 클래스의 ToString () 메서드는 형식 이름을 반환합니다. 아래의 단편은 콘솔에 "사용자"를 출력합니다.

public class User
{
    public string Name { get; set; }
    public int Id { get; set; }
}

...

var user = new User {Name = "User1", Id = 5};
Console.WriteLine(user.ToString());

그러나 사용자 클래스는 반환하는 문자열을 변경하기 위해 ToString ()을 재정의 할 수도 있습니다. 아래의 코드는 "Id : 5, Name : User1"을 콘솔에 출력합니다.

public class User
{
    public string Name { get; set; }
    public int Id { get; set; }
    public override ToString()
    {
        return string.Format("Id: {0}, Name: {1}", Id, Name);
    }
}

...

var user = new User {Name = "User1", Id = 5};
Console.WriteLine(user.ToString());

ToString ()과의 관계

String.Format() 메서드는 데이터를 문자열로 서식 지정하는 데 확실히 유용하지만, 특히 아래와 같이 단일 개체를 처리 할 때 약간 과도한 작업이 될 수 있습니다.

String.Format("{0:C}", money);  // yields "$42.00"

더 쉬운 접근법은 C # 내의 모든 객체에서 사용할 수있는 ToString() 메서드를 사용하는 것일 수 있습니다. 동일한 표준 및 사용자 지정 서식 지정 문자열을 모두 지원하지만 단일 인수 만 있으므로 필요한 매개 변수 매핑이 필요하지 않습니다.

money.ToString("C");  // yields "$42.00"

주의 사항 및 포맷팅 제한 사항

이 접근법은 일부 시나리오에서 더 간단 할 수 있지만 ToString() 접근 방식은 String.Format() 메서드 내 에서처럼 왼쪽 또는 오른쪽 패딩을 추가하는 것과 관련하여 제한됩니다.

String.Format("{0,10:C}", money);  // yields "    $42.00"

ToString() 메서드로 이와 동일한 동작을 수행하려면 PadLeft() 또는 PadRight() 와 같은 다른 메서드를 사용해야합니다.

money.ToString("C").PadLeft(10);  // yields "    $42.00"


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow