블로그 이미지
Every unexpected event is a path to learning for you.

카테고리

분류 전체보기 (2737)
Unity3D (817)
Programming (474)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (58)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (53)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
04-19 00:04

Array -> String

Programming/C# / 2011. 5. 9. 02:12

요새 c#으로 삽질중이다.

 

오늘은 배열로 한 한시간 가까이 날려 먹은거 같은데;;

 

Array라는 타입이 있다. 모든 배열의 기초 클래스란다

요넘을 String[]로 옮기고 싶은 거다...

 

즉...

Array Buffer = new Array[0];

이런 녀석이 있다면

String[] szBuffer = Buffer;

이 짓을 하고 싶다는 거지;;

 

한참을 해맸지만 결론은 간단했다.

 

String[] szBuffer = (String)Buffer;

 

허탈하네 - _-;;



[출처]
 C#에서 배열|작성자 시네루진

반응형

'Programming > C#' 카테고리의 다른 글

C# 관련 정보 사이트[MKEXDEV.NET]  (0) 2011.09.13
Processing Global Mouse and Keyboard Hooks in C#  (0) 2011.05.13
SaveFileDialog  (0) 2011.03.25
DataGridView to XML  (0) 2011.03.23
ToolTip 사용하기  (0) 2011.02.11
Posted by blueasa
, |
흔히 string 객체 중 null일 때 참조하여
exception을 내는 경우를 방지하기 위하여
아래와 같이 코딩하는 경우가 있는데
매번 이와 같이 하는 것도 귀찮은 일이다.

string str = null;
...

if(str != null && str.length > 0)
{
...
}

그러나 위와 같은 check를 하는 함수가 string class에 static function으로 존재한다.
모르면 손발이 고생 ;;
string.IsNullOrEmpty(str)
반응형
Posted by blueasa
, |

C# 문자열은 string 키워드를 사용하여 선언된 문자의 배열입니다. 문자열 리터럴은 다음 예제에서처럼 따옴표를 사용하여 선언됩니다.

string s = "Hello, World!";

다음과 같이 부분 문자열을 추출하고 문자열을 연결할 수 있습니다.

string s1 = "orange";
string s2 = "red";

s1 += s2;
System.Console.WriteLine(s1);  // outputs "orangered"

s1 = s1.Substring(2, 5);
System.Console.WriteLine(s1);  // outputs "anger"

문자열 개체는 한 번 만들어지면 변경할 수 없는 "변경 불가능" 개체입니다. 문자열에 대해 동작하는 메서드는 실제로 새 문자열 개체를 반환합니다. 이전 예제에서 s1과 s2의 내용이 결합되어 단일 문자열이 만들어질 때, "orange"와 "red"를 포함하는 두 문자열은 모두 변경되지 않습니다. += 연산자는 결합된 내용을 포함하는 새 문자열을 만듭니다. 결과적으로 s1도 다른 문자열을 참조하게 됩니다. "orange" 만 포함하는 문자열은 여전히 존재하지만, s1이 결합되는 시점에서 더 이상 참조되지 않습니다.

Note참고

문자열에 대한 참조를 만들 때는 주의해야 합니다. 문자열에 대한 참조를 만든 다음 해당 문자열을 "수정"할 경우 해당 참조는 문자열을 수정할 때 만든 새 개체가 아니라 원래 개체를 계속해서 가리킵니다. 다음 코드에서는 이를 보여 줍니다.

string s1 = "Hello";
string s2 = s1;
s1 += " and goodbye.";
Console.WriteLine(s2); //outputs "Hello"

문자열을 수정하면 새 문자열 개체가 만들어지므로 대량의 연결 작업이나 기타 관련된 문자열 조작 작업을 수행할 경우에는 성능상의 이유로 다음과 같이 StringBuilder 클래스를 사용해야 합니다.

System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("one ");
sb.Append("two ");
sb.Append("three");
string str = sb.ToString();

StringBuilder 클래스에 대해서는 "Stringbuilder 사용" 단원에서 자세히 설명합니다.

문자열 작업

이스케이프 문자

"\n"(줄 바꿈) 및 "\t"(탭) 등의 이스케이프 문자를 문자열에 포함할 수 있습니다. 예를 들어, 다음 줄은

string hello = "Hello\nWorld!";

다음 줄과 동일합니다.

Hello

World!

백슬래시를 포함하려면 앞에 백슬래시가 하나 더 있어야 합니다. 예를 들어, 다음 문자열은

string filePath = "\\\\My Documents\\";

다음 문자열과 동일합니다.

\\My Documents\

@ 기호

@ 기호를 사용하면 문자열 생성자가 이스케이프 문자와 줄 바꿈을 무시하도록 할 수 있습니다. 따라서 다음 두 개의 문자열은 동일합니다.

string p1 = "\\\\My Documents\\My Files\\";
string p2 = @"\\My Documents\My Files\";

ToString()

Object에서 파생된 모든 개체와 마찬가지로 문자열에서는 값을 문자열로 변환하는 ToString 메서드를 제공합니다. 이 메서드를 사용하면 다음과 같이 숫자 값을 문자열로 변환할 수 있습니다.

int year = 1999;
string msg = "Eve was born in " + year.ToString();
System.Console.WriteLine(msg);  // outputs "Eve was born in 1999"

개별 문자 액세스

SubString()Replace(),Split() 및 Trim() 등의 메서드를 사용하여 문자열에 포함된 개별 문자에 액세스할 수 있습니다.

string s3 = "Visual C# Express";

System.Console.WriteLine(s3.Substring(7, 2));         // outputs "C#"
System.Console.WriteLine(s3.Replace("C#", "Basic"));  // outputs "Visual Basic Express"

또한 다음과 같이 문자를 문자 배열에 복사할 수 있습니다.

string s4 = "Hello, World";
char[] arr = s4.ToCharArray(0, s4.Length);

foreach (char c in arr)
{
    System.Console.Write(c);  // outputs "Hello, World"
}

다음과 같이 인덱스를 사용하여 문자열의 개별 문자에 액세스할 수 있습니다.

string s5 = "Printing backwards";

for (int i = 0; i < s5.Length; i++)
{
    System.Console.Write(s5[s5.Length - i - 1]);  // outputs "sdrawkcab gnitnirP"
}

대/소문자 바꾸기

문자열의 문자를 대문자 또는 소문자로 변경하려면 다음과 같이 ToUpper() 또는 ToLower()를 사용합니다.

string s6 = "Battle of Hastings, 1066";

System.Console.WriteLine(s6.ToUpper());  // outputs "BATTLE OF HASTINGS 1066"
System.Console.WriteLine(s6.ToLower());  // outputs "battle of hastings 1066"

비교

두 문자열을 비교하는 가장 간단한 방법은 대/소문자 구분 비교를 수행하는 == 및 != 연산자를 사용하는 것입니다.

string color1 = "red";
string color2 = "green";
string color3 = "red";

if (color1 == color3)
{
    System.Console.WriteLine("Equal");
}
if (color1 != color2)
{
    System.Console.WriteLine("Not equal");
}

또한 문자열 개체에는 한 문자열이 다른 문자열보다 작은지(<) 또는 큰지(>)에 따라 정수 값을 반환하는CompareTo() 메서드가 있습니다. 문자열을 비교할 때는 유니코드 값을 사용하며, 소문자 값이 대문자 값보다 작습니다.

string s7 = "ABC";
string s8 = "abc";

if (s7.CompareTo(s8) > 0)
{
    System.Console.WriteLine("Greater-than");
}
else
{
    System.Console.WriteLine("Less-than");
}

다른 문자열 내에서 문자열을 검색하려면 IndexOf()를 사용합니다. IndexOf()는 검색 문자열을 찾지 못한 경우 -1을 반환하고, 검색 문자열을 찾은 경우에는 이 문자열이 처음 나타나는 위치의 인덱스(0부터 시작)를 반환합니다.

string s9 = "Battle of Hastings, 1066";

System.Console.WriteLine(s9.IndexOf("Hastings"));  // outputs 10
System.Console.WriteLine(s9.IndexOf("1967"));      // outputs -1

문자열을 부분 문자열로 분할

문장을 개별 단어로 분할하는 등 문자열을 부분 문자열로 변환하는 것은 일반적인 프로그래밍 작업입니다.Split() 메서드는 공백 문자 등의 구분 기호 char 배열을 받아 부분 문자열의 배열을 반환합니다. 다음과 같이foreach를 사용하여 이 배열에 액세스할 수 있습니다.

char[] delimit = new char[] { ' ' };
string s10 = "The cat sat on the mat.";
foreach (string substr in s10.Split(delimit))
{
    System.Console.WriteLine(substr);
}

이 코드는 다음과 같이 각 단어를 별도의 줄에 출력합니다.

The

cat

sat

on

the

mat.

Null 문자열 및 빈 문자열

빈 문자열은 문자가 들어 있지 않은 System.String 개체의 인스턴스입니다. 빈 문자열은 다양한 프로그래밍 시나리오에서 빈 텍스트 필드를 나타내는 데 매우 일반적으로 사용됩니다. 빈 문자열은 유효한 System.String개체이므로 빈 문자열에서 메서드를 호출할 수 있습니다. 빈 문자열은 다음과 같이 초기화됩니다.

string s = "";

이와 반대로, null 문자열은 System.String 개체의 인스턴스를 참조하지 않으며 null 문자열에서 메서드를 호출하려고 하면 항상 NullReferenceException이 발생합니다. 그러나 다른 문자열과의 연결 및 비교 연산에서는 null 문자열을 사용할 수 있습니다. 다음 예제에서는 null 문자열을 참조할 때 예외가 throw되는 경우와 그렇지 않은 경우를 보여 줍니다.

string str = "hello";
string nullStr = null;
string emptyStr = "";

string tempStr  = str + nullStr; // tempStr = "hello"
bool b = (emptyStr == nullStr);// b = false;
emptyStr + nullStr = ""; // creates a new empty string
int I  = nullStr.Length; // throws NullReferenceException

StringBuilder 사용

StringBuilder 클래스는 프로그램에서 수행할 문자열 조작 작업이 많을 경우 성능을 향상시켜 주는 문자열 버퍼를 만듭니다. 또한 StringBuilder 문자열을 사용하면 개별 문자를 다시 할당할 수 있습니다. ���러한 기능은 기본 제공 데이터 형식에서는 지원하지 않습니다. 예를 들어 다음 코드에서는 새 문자열을 만들지 않고 문자열의 내용을 변경합니다.

System.Text.StringBuilder sb = new System.Text.StringBuilder("Rat: the ideal pet");
sb[0] = 'C';
System.Console.WriteLine(sb.ToString());
System.Console.ReadLine();

이 예제에서는 StringBuilder 개체를 사용하여 숫자 형식의 집합에서 문자열을 만듭니다.

class TestStringBuilder
{
    static void Main()
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();

        // Create a string composed of numbers 0 - 9
        for (int i = 0; i < 10; i++)
        {
            sb.Append(i.ToString());
        }
        System.Console.WriteLine(sb);  // displays 0123456789

        // Copy one character of the string (not possible with a System.String)
        sb[0] = sb[9];

        System.Console.WriteLine(sb);  // displays 9123456789
    }
}

자세한 내용

C# 프로그래머 참조:

참고 항목







반응형
Posted by blueasa
, |
반응형
Posted by blueasa
, |

닷넷 프레임워크를 이용하는 동안, 의외로 곳곳에 훌륭한 기술들이 많이 숨어있습니다. 특히 문자열 처리에 관한 부분은 특별한 경우가 아니면, 기본으로 내장되어있는 API들 (Formatting API와 정규 표현식 API)만으로 쉽게 처리가 가능합니다. 예전 블로그 아티클 중에 정규표현식에 관련된 아티클들이 몇 가지 있으니 이 아티클과 더불어서 보시면 좋을것 같습니다.

 

오늘 살펴보려고 하는 내용은 String Formatting API에 대한 내용입니다.

 

1. 자유자재로 사용하는 치환자

 

대부분의 예제, 대부분의 코드에서는 String Formatting API에 서식 문자열을 지정할 때, 인자 순서대로, 단 한 번씩만 치환자를 사용합니다. 하지만, 같은 치환자를 여러번 중복해서 사용하거나, 인자 순서와는 별개로 지정할 필요는 많습니다. 이럴 때에는, 걱정하지 말고 매개 변수 개수에 유의하면서 치환자를 자유롭게 사용하면 됩니다.

 

String.Format("{0} {1} {1} {4} {3} {2}", 'a', 'b', 'c', 'd', 'e');
// => a b b e d c

 

2. C# 만의 편리한 기능: Verbatim String과 함께 사용하는 강력한 Formatting API

 

여러 줄에 걸친 문자열을 별도의 데이터 파일이 아닌, C# 코드 내에 포함할 수 있다면, 좀 더 String Formatting API를 극적으로 활용할 수 있을 것입니다. 이럴 때, Verbatim String을 활용하면 좋습니다. Verbatim String은 @" 으로 시작하여 " 로 끝이나는 문자열 구문 전체를 말합니다. 이 문자열 블럭 안에는 Back Slash나 CR/LF 등의 문자를 포함할 수 있습니다.

 

String.Format(@"<html>
<head><title>Hello World!</title></head>
<body>
<p>{0}</p>
</body>
</html>", DateTime.Now);

 

다만 유의할 점이 하나 있다면, 문자열이 파일로부터 나타난 것이든, Verbatim String에 의한 것이든, 의미를 다르게 해석할 가능성이 있는 글자 (예: '{' 나 '}' 같은 글자)들은 그 의미를 정확하게 살릴 수 있도록 지정하거나, 같은 문자를 연속으로 두번으로 지정하여 이스케이프 처리해야 합니다. (예: "{{", "}}")

 

String.Format(@"int main(int argc, char **argv) {
return 0;
}");

 

즉, 위의 경우 String.Format 메서드에서 오류를 반환합니다. 치환자 시작 기호 다음에 적절한 수식 대신 다른 문자열들이 열거되기 때문에 치환할 수 없다는 오류가 발생합니다. 위의 경우 중괄호 부분들을 아래와 같이 수정해야 합니다.

 

String.Format(@"int main(int argc, char **argv) {{
return 0;
}}");

 

위의 예시에서는 C 언어 코드에 대한 것을 예로 들었습니다만, 같은 방법으로 C# 프로그래밍 코드를 코드 안에 포함하여 재사용할 수도 있습니다. 또는, IronPython 등의 코드를 Embedding하여 DLR에서 사용할 수 있도록 재구성하는 시나리오도 생각해 볼 수 있을 것입니다.

 

3. 날짜 및 시간 표현을 자유자재로 활용하기

 

아직도 날짜 및 시간 표현을 위하여 문자열을 조립하거나, 알고리즘을 사용하여 오전/오후를 구분하십니까? 그렇게 할 이유가 없습니다. 오히려 좀 더 세밀하고 다양한 기능을 제공하는 기본 기능이 있기 때문입니다.

 

String.Format(@"{0:yyyy-MM-dd}", DateTime.Now); // 2009-01-30
String.Format(@"{0:tt hh:mm:ss}", DateTime.Now); // 오전 01:47:33
String.Format(@"{0:yyyy-MM-dd tt hh:mm:ss}", DateTime.Now); // 2009-01-30 오전 01:48:11

 

만약 오전/오후에 해당하는 문자열을 한글이 아닌 영문 표기 (AM/PM)로 변경하려면 어떻게 해야 할까요? 이럴 때에는 CultureInfo 객체를 Format 메서드에 전달하면 간단해집니다. CultureInfo는 System.Globalization 네임스페이스 안에 있습니다.

 

String.Format(CultureInfo.GetCultureInfo("en-US"), @"{0:tt hh:mm:ss}", DateTime.Now); // AM 04:30:44
String.Format(CultureInfo.GetCultureInfo("ko-KR"), @"{0:tt hh:mm:ss}", DateTime.Now); // 오후 03:03:02
String.Format(CultureInfo.GetCultureInfo("ja-JP"), @"{0:tt hh:mm:ss}", DateTime.Now); // 午後 10:08:03

 

위의 예시에서 주석으로 표시한 것과 같이 현재 시간에서 "오전"과 "오후"에 대한 표현을 해당 국가의 언어의 표기법에 맞추어 표기하고 있습니다. en-US는 언어를 영어로 사용하며 지리적으로 미국을 기준으로 한다는 의미로 해석되며, ko-KR은 언어를 한국어로 사용하고 지리적으로는 대한민국, ja-JP는 언어를 일본어로 사용하고 지리적으로 일본을 기준으로 한다는 의미로 해석됩니다.

 

위와 같이 언어 및 지역 코드를 설정할 때 알아야 할 사항이 두 가지가 있는데, 첫 째는 반드시 언어 코드의 전체 이름을 기재해야 합니다. 예를 들어, en-US에서 en만 지정하면 en에 해당하는 설정은 "중립 문화권"이기 때문에 CultureInfo.GetCultureInfo 메서드로는 받아들일 수 없습니다. 그리고 US만 지정하면 US에 해당하는 코드가 없으므로 역시 오류가 발생합니다. 그리고, 언어 코드가 시간대 설정까지 자동으로 반영하는 것은 아니므로 en-JP (언어는 영어이며 지역은 일본)와 같은 설정은 유효하지 않으며 표준 코드 정의 내역에 없기 때문에 받아들여지지 않습니다. 시간대에 대한 설정은 http://msdn.microsoft.com/ko-kr/library/system.timezone.aspx 에 소개된 TimeZone 클래스 (닷넷 3.5부터 사용 가능합니다)를 활용해야 합니다.

 

4. 통화 금액 표현하기

 

지역 설정을 이용하여 손쉽게 처리할 수 있는 일이 또 한 가지 있는데, 바로 통화 금액 표기에 관한 것입니다. 아래의 코드를 살펴보기로 하겠습니다.

 

String.Format(CultureInfo.GetCultureInfo("es-ES"), "{0:C}", 300); // 300,00 €
String.Format(CultureInfo.GetCultureInfo("ko-KR"), "{0:C}", 300); // \300

 

그리고, 좀 더 구체적으로 소수점 자릿수 등을 표현하거나, 음수/양수/영점 표현을 설정하고자 한다면 아래와 같이 활용할 수 있습니다. (Delphi Basic 웹 사이트 http://www.delphibasics.co.uk/RTL.asp?Name=FormatFloat 에서 부분 발췌한 샘플 코드를 올립니다.)

 

// 반올림 예시
String.Format("{0:#####}", 1234.567);
String.Format("{0:00000}", 1234.567);
String.Format("{0:0}", 1234.567);
String.Format("{0:#,##0}", 1234.567);
String.Format("{0:0,0}", 1234.567);

// 소수점 사용 예시
String.Format("{0:0.####}", 1234.567);
String.Format("{0:0.0000}", 1234.567);

// 공학용 표기
String.Format("{0:0.0000000E+00}", 1234.567);
String.Format("{0:0.0000000E-00}", 1234.567);
String.Format("{0:#.#######E-0#}", 1234.567);

// 음수/양수/ZERO 에 따른 표기
String.Format("{0:0.0}", -1234.567);
String.Format("{0:0.0 CR;0.0 DB}", -1234.567);
String.Format("{0:0.0 CR;0.0 DB}", 1234.567);
String.Format("{0:0.0 CR;0.0 DB;Zero}", 0.00);

5. Bonus: 자연스러운 16진수 표기 방법 (String.Format을 사용하지 않습니다.)

 

"0x" + (16).ToString("X8"); // 8자리 16진수 표기, 대문자
"0x" + (33).ToString("x4"); // 4자리 16진수 표기, 소문자

 출처: http://www.rkttu.com/

반응형
Posted by blueasa
, |
System::String 관련

 

 

 

예제 소스 (Mngstr2Umngstr.h)

  1.  
  2. #include <string>
  3. using namespace System;
  4. String^ CppCliStrConv(const std::string& native_str)
  5. { return Runtime::InteropServices::Marshal::PtrToStringAnsi(IntPtr::IntPtr((void*)native_str.c_str())); }

 

반응형

'Programming > C++/CLI' 카테고리의 다른 글

C#에서 Native C++ 프로젝트 사용하기  (0) 2010.05.31
마샬링(Marshaling)  (0) 2010.05.27
혼합 모드에서 디버깅  (0) 2010.05.26
다양한 문자열 형식 간 변환  (0) 2010.05.26
C++/CLI & WCF Programming  (1) 2010.05.26
Posted by blueasa
, |

* 오래된 문서이기는 하나, 잘 정리되어 있기 때문에 번역한번 해보았습니다.
 더 추가된 포맷팅에 대해서는 MSDN을 참조하세요!

원문 : http://blog.stevex.net/string-formatting-in-csharp/

String.Format()함수를 사용하는 .NET 문자열 포맷팅에 관한 빠른 참조(quick reference)를 찾을 수 없어서, 이 문서를 만들었습니다.(이 것 때문에 문자열 포맷팅 FAQ와 이상한 이런 만화까지 만들어졌습니다.)

.NET Framework을 가지고 처음 작업했을때, 한 가지가 저를 당황케 했습니다. sprintf()가 없다는 점입니다. sprintf()는출력버퍼, 포맷팅 문자열과 몇개 인자를 받아서 원하는 형식의 문자열로 만들어 주는 C 함수입니다. 예를 들어

char szError[256];
sprintf(szError, "Error %d occurred. \n", nError);

nError가 12라고 가정한다면, 위 코드는 szError  버퍼에  "Error 12 occurred." 문자열을 쓸것입니다. 이것은 C 프로그래밍의 기본이며 명확하고 사용하기 간단하기 때문에, STL에서 더 좋은 기능을 제공하고 있지만, 대부분의 C++ 프로그래머들이 아직도 이것을 사용하고 있습니다. STL에서 위와 같은 코드는

str << "Error " << nError << " occurred." << endl;

거나, 이와 비슷할 것입니다. 이것은 type-safe이고 sprintf보다 더 객체지향적 이나, 로컬라이즈하거나 코드를 읽기가 쉽지는 않습니다.

.NET Framework은  문자열을 아주 휼륭하게 처리하나, 익숙해지는데 시간이 걸립니다. .NET에서 sprintf와 거의 동등한 기능을 가진 것은 포맷 문자열과 인자를 받아 출력 문자열을 생성하는, 정적 String.Format 함수 입니다. (이것은 출력버퍼에 오버플로우를 발생시키지 않는 다는 점에서 sprintf보다 훨씬 개선된 것입니다.) 예를 들면 위와 비슷한 코드는

string errorString = String.Format("Error {0} occurred.", nError);

입니다. 메타데이터의 능력때문에 .NET 환경에서는 포맷팅할때 데이터타입이 무엇인지 알려주는 문자열을 필요로 하지 않고, 사용하기 원하는 곳에 위치만 시키면 됩니다. (일반적인 sprintf 버그는 잘못된 데이터 타입을 제공하는 것으로, %d대신에 %s를 사용하는것을 막을 수 없으며, 이것은 sprintf가 호출될때 프로그램을 멈추게 할 것이다.)

위 문자열안의 {0}은 nError의 값으로 대체되지만, 이진수로 지정해서 지정해서 사용하려 한다면? 또는 16진수와 같은 것을 사용하려 한다면? Framework은 이러한 모든것들을 지원하지만, 문자 포맷팅을 사용하는 String.Format 함수를 사용하지 않고, 지정된 타입을 사용한다는 것이 혼란스러워 보일 수 도 있습니다.

모든 객체가 문자열을 반활할때 ToString 메소드가 호출됩다. ToString 메소드는 문자열 인자들을 받을 수 있고 - String.Fromat을 호출한 후, "{0:##}"가 같은 포맷팅 문자열들이 위치에 전달된 후 어떻게 포맷팅 될지 알려줍니다.

중괄호 안의 텍스트는 {Index[, alignment][:formatString]} 입니다. 만약 alignment가 양수이면, 텍스트는 오른쪽 정렬되며, 텍스트가 양수보다 작다면 공백이 추가됩니다. 만약 음수라면 왼쪽 정렬됩니다.

문자열

정렬을 제외하고는 문자열에 어떤 포맷팅도 적용되지 않습니다. 정렬의 모든 인자들은 String.Format이 호출될때, 사용되고 표시됩니다.

 예시 결과 
 String.Format("->{0,10}<-", "Hello");  ->   Hello<-
 String.Format("->{0,-10}<-", "Hello");  ->Hello    <-

숫자

기본적인 숫자 포맷팅 지정자입니다.

지정자  타입  형식  결과(1.42일 경우)  결과(-12400일 경우) 
 c  통화  {0:c}  $1.42  -\12,400
 d  10진수  {0:d} System.FormatException  -12400
 e  지수  {0:e}  1.420000e+000  -1.240000e+004
 f  고정소수점  {0:f}  1.42  -12400.00
 g  일반  {0:g}  1.42  -12400
 n  천단위로 ","로 구분
 되는 숫자
 {0:n}  1.42  -12,400
 r  라운드트립  {0:r}  1.42  System.FormatException
 x  16진수  {0:x4}  System.FormatException  cf90

* 라운드트립 :
이 형식은 SingleDouble 형식에만 사용할 수 있습니다. 라운드트립 지정자는 문자열로 변환된 숫자 값이 같은 숫자 값으로 다시 구문 분석될 수 있도록 보장해 줍니다. 이 지정자를 사용하여 숫자 값 형식을 지정하면 Double에는15자리의 전체 자릿수를, Single에는 7자리의 전체 자릿수를 가진 일반 형식을 사용하여 숫자 값을 먼저 테스트합니다. 이 값이 같은 숫자 값으로 다시 구문 분석되면 일반 형식 지정자를 통해 형식이 지정됩니다. 그러나 이 값이 같은 숫자 값으로 다시 구문 분석되지 못하면, Double에는 17자리 전체 자릿수를, Single에는 9자리 전체 자릿수를 사용하여 이 값의 형식이 지정됩니다.전체 자릿수 지정자가 있더라도 무시됩니다. 이 지정자를 사용할 때는 라운드트립이 전체 자릿수보다 우선합니다. - MSDN

사용자정의 포맷팅 입니다.

 지정자 타입   예시  결과(1500.42일 경우) 설명 
 0  0 자리 표시자  {0:00.0000}  1500.4200  지정된 자릿수만큼 0을
 추가한다.
 #  10진수 자리 표시자  {0:(#).##}  (1500).42  
 .  소숫점  {0:0.0}  1500.4  
 '  천자리 구분 기호  {0:0,0}  1,500  반드시 두 0사이에 있
 어야 한다.
 '.  숫자 스케일링  {0:0,.}  2  1000을 기준으로, 해당
 숫자의 스케일을 알려
 준다. 예를 들면 1499
 는 1이고, 1500은 2이
 다.
 %  비율  {0:0%}  150042%  100을 곱하고 %기호를
 붙인다.
 e  지수 자리 표시자  {0:00e+0}  15e+2  많은 지수표현이 가능
 합니다.
 ;  그룹 구분자  하단 참조    

그룹구분자는 음수값을 괄호로 묶는것이 필요로 하는 통화 값 형식에 유용합니다. 이 통화 형식 예제는 문서의 하단에 있습니다.

날짜

날짜 포맷팅은 시스템의 국가별 설정에 따라 다릅니다. 아래 예는 저의 로컬 로케일 설정에 의한 것입니다.

 지정자 타입  예(System.DateTime.Now일 경우) 
 d  짧은 날짜  2009-11-02
 D  긴 날짜  2009년 11월 2일 월요일
 t  짧은 시간  오후 4:30
 T  긴 시간 오후 4:30:06
 f  전체 날짜 시간  2009년 11월 2일 월요일 오후 4:30
 F  긴 전체 날짜 시간  2009년 11월 2일 월요일 오후 4:30:06
 g  기본 날짜 시간  2009-11-02 오후 4:30
 G  긴 기본 날짜 시간  2009-11-02 오후 4:30:06
 M  월 날짜 패턴  11월 2일
 r  RFC1123 날짜 문자열  Mon, 02 Nov 2009 16:30:06 GMT
 s  정렬가능한 날짜 문자열  2009-11-02T16:30:06
 u  정렬가능한 유니버셜 날짜 시간 패턴,
 로컬타임
 2009-11-02 16:30:06Z
 U  정렬가능한 유니버셜 날짜 시간 패턴,
 GMT
 2009년 11월 2일 월요일 오전 7:30:06
 Y  년 월 패턴  2009년 11월

사용자 지정 날짜 포맷팅

 지정자 타입   예시 결과 
 dd  일  {0:dd}  02
 ddd  요일  {0:ddd}  월
 dddd  전체 요일  {0:dddd}  월요일
 f, ff, ...  초 유효자릿수  {0:fff}  366
 gg, ...  시대  {0:gg}  서기
 hh  2자리 시간  {0:hh}  04
 HH  2자리 시간, 24시간 형식  {0:HH}  16
 mm  00-59 분  {0:mm}  43
 MM  01-12 월  {0:MM}  11
 MMM  월 약어  {0:MMM}  11
 MMMM  월 이름  {0:MMMM}  11월
 ss  00-59 초  {0:ss}  47
 tt  AM, PM  {0:tt}  오후
 yy  2자리 년  {0:yy}  09
 yyyy  년  {0:yyyy}  2009
 zz 2자리  타임존 옵셋  {0:zz}  +09
 zzz  타임존 옵셋  {0:zzz}  +09:00
 :  구분자  {0:hh:mm:ss}  04:43:47
 /  구분자  {0:dd/MM/yyyy}  02-11-2009

열거형

 지정자  타입
 g  열거자 이름을 문자열로 가져올 수 있으면, 문자열로 그렇지
 않으면 정수로 보여줍니다.
 f  열거자 이름을 문자열로 보여줍니다.
 d  열거자 이름을 정수로 보여줍니다.
 x  열거자 이름을 8자리의 16진수로 보여줍니다.

유용한 예제들

String.Format("{0:$#,##0.00; ($#,##0.00); Zero}", value);

이것은 만약 1243.50을 전달하면, "$1,240.00"을 반환할 것입니다. 만약 -값이 전달된다면, 괄호안에 같은 형태의 결과값이 반활될 것입니다.("($1,240.00)") 만약 0이 전달된다면 "Zero"가 반환될 것입니다.

String.Format({0:(###) ###-####}", 8005551212);

이것은 "(800) 555-1212"를 반환할 것입니다.


반응형
Posted by blueasa
, |