Section 13.3: String.Join 을 이용하여 문자열 배열을 이어붙이기

String.Join 메소드를 사용하면 문자열 배열 내의 복수개의 요소들을 이어붙일 수 있다 (concatenate).

string[] value = {"apple", "orange", "grape", "pear"}; string separator = ", "; string result = String.Join(separator, value, 1, 2); Console.WriteLine(result);

위 코드는 아래와 같은 결과를 출력해 줄 것이다:

"orange, grape"

위에서 소개된 예제는 String.Join(String, String[], Int32, Int32) 형태의 overload 를 사용한 예제이며, 이는 구분자 (separator) 와 배열 자체 뿐만 아니라 시작 인덱스 (startIndex) 와 갯수 (count) 를 함께 제공할 수 있는 버전의 메소드이다.

만약 startIndexcount 를 사용하지 않는 버전의 overload 를 사용하고 싶다면, 아래와 같이 배열 내의 모든 문자열을 이어 붙일 수 있다:

string[] value = {"apple", "orange", "grape", "pear"}; string separator = ", "; string result = String.Join(separator, value); Console.WriteLine(result);

위 예제의 출력 결과는 아래와 같다:

apple, orange, grape, pear
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 13.2: System.Text.StringBuilder 를 활용하여 문자열 이어붙이기

StringBuilder 를 통한 문자열 이어붙이기 작업은 단순한 + 연산자를 사용하는 것보다 성능 측면에서 장점이 있다. 이는 메모리가 할당되는 방법에 있어 차이가 있기 때문인데, 매 문자열 이어붙이기 작업 수행시마다 메모리를 재할당하는 대신에, StringBuilder 는 메모리를 블럭 단위로 할당한 후 현재 블럭 내 메모리가 모두 소진된 경우에 한하여 메모리를 재할당하게 되어 있다. 이는 작은 문자열 이어붙이기 작업을 다량으로 수행할 때에 큰 차이를 불러올 수 있다.

StringBuilder sb = new StringBuilder(); for (int i = 1; i <= 5; i++) { sb.Append(i); sb.Append(" "); } Console.WriteLine(sb.ToString()); // "1 2 3 4 5 "

Append() 메소드는 StringBuilder 에 대한 reference 를 반환하기 때문에, 연속적으로 연결하여 (daisy chained) 호출될 수 있다:

StringBuilder sb = new StringBuilder(); sb.Append("some string ") .Append("another string");
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 13.1: 문자열 연결 (concatenation) 을 위한 '+' 연산자 사용법

string s1 = "string1"; string s2 = "string2"; string s3 = s1 + s2; // "string1string2"
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 12.11: ToString() 메소드와의 비교

String.Format() 메소드는 각종 데이터를 문자열로 서식화 시키는 데에 있어서 매우 유용한 것은 사실이나, 아래와 같이 하나의 객체를 간단히 변환하고자 할 때 사용하기에는 너무 복잡하다는 느낌이 들 수도 있다:

String.Format("{0:C}", money); // "$42.00" 로 변환된다

조금 더 간단한 방법으로는, C# 의 모든 객체들에서 제공하고 있는 ToString() 메소드를 사용하는 것이다. 이는 모든 표준 및 사용자 서식 문자열을 동일하게 제공하지만, 하나의 인자만을 사용하기 때문에 복잡한 parameter mapping 정보를 기술하지 않아도 된다:

money.ToString("C"); // "$42.00" 로 변환된다

서식 사용상의 제약 사항 및 주의점

위와 같은 접근법은 몇몇 경우에 좀 더 손쉽게 사용할 수 있으나, ToString() 만으로는 String.Format() 에서 제공하던 문자열 좌/우측에 여백 문자 추가 (padding) 기능이 제공되지 않는 문제점이 있다:

String.Format("{0,10:C}", money); // "    $42.00" 로 변환된다

ToString() 메소드를 이용하면서도 동일한 결과를 얻길 원한다면, 여백문자를 삽입할 좌/우측 방향에 따라 PadLeft() 혹은 PadRight() 를 각각 사용할 수 있다:

money.ToString("C").PadLeft(10); // "    $42.00" 로 변환된다
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 12.10: String.Format() 표현식 내에서 중괄호 escape 처리하기

string outsidetext = "I am outside of bracket"; string.Format("{{I am in brackets!}} {0}", outsidetext); // 출력 결과 : "{I am in brackets!} I am outside of bracket"
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 12.9: ToString()

ToString() 메소드는 모든 reference 객체 타입에 존재하는 메소드이다. 이는 모든 reference 타입들이 ToString() 메소드를 정의하고 있는 Object 에서 파생되었기 때문이다. 기본적으로 해당 객체 base 클래스의 ToString() 메소드는 타입 이름 (type name) 을 반환하게 되어 있다. 아래의 코드는 "User" 라는 문자열을 콘솔창에 출력하게 될 것이다.

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());

그러나, 위에서 작성한 User 클래스는 그 스스로가 ToString() 을 재정의 (override) 하여 변경된 문자열을 반환할 수도 있다. 아래의 코드는 "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());
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 12.8: 숫자 관련 서식

// 정수 타입을 16 진수로 표현하기 string.Format("Hexadecimal: byte2: {0:x2}; byte4: {0:X4}; char: {1:x2}", 123, (int)'A'); // 천 단위 구분자가 추가된 정수 string.Format("Integer, thousand sep.: {0:#,#}; fixed length: >{0,10:#,#}<", 1234567); // 앞이 0으로 채워진 정수 타입 string.Format("Integer, leading zeroes: {0:00}; ", 1); // 소수 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# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 12.7: 여백 문자를 채워넣어 좌/우 정렬시키기

중괄호 내의 두번째 값은 해당 위치에 대입될 문자열의 길이를 나타낸다. 이 두번째 값을 양수 혹은 음수로 변경함으로써, 해당 문자열의 좌/우 정렬 설정을 변경할 수 있다.

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<-
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts