본문 바로가기

프로그램/유니티 C# 강좌

[유니티 C# 강좌] 4. 문자열(String)

728x90
반응형

1. 문자열

1.1 문자열

 

문자열은 문자들의 배열입니다.

문자열은 유니티에서 로그(Log)를 출력하거나, UI(User Interface)에서 많이 사용됩니다.

 

 

1.2 사용 방법

 

문자열의 기본적인 데이터 형식은 string입니다.

 

사용 방법

string 변수-이름 = "";
string name = "Coder Zero";

 

문자열 변수에 일반적으로는 문자열을 넣지만,

문자열은 참조 방식이기 때문에, null 값으로 초기화를 할 수도 있고,

빈칸인 ""이나 string.Empty(빈칸을 의미함)을 사용하여 초기화를 할 수도 있습니다.

 

문자열 선언 및 초기화

string message1 = "message1"; // 일반적인 초기화
string messaeg2 = null; // null로 초기화. 아무 값이 할당되지 않았음.
string message3 = ""; // null이 아니라, 빈칸으로 초기화 한 것임.
string message4 = string.Empty; // message3과 동일하게 ""빈칸으로 초기화한 것임.

 

 

1.3 문자 & 문자열

 

문자열과 비교되는 데이터 형식이 문자(char)입니다.

문자는 문자 하나를 의미하고, 문자열은 문자 하나 이상입니다.

문자는 char 키워드와 ''(작은따옴표)를 사용하고, 문자열은 string 키워드와 ""(큰 따음표)를 사용합니다.

 

문자

문자열

char character = 'a';

 string word = "abc";

 

아래 그림과 같이 string형 word는 'a', 'b', 'c'라는 char 형이 배열로 되어 있습니다.

 

코더제로 유니티 C# 강좌 문자열(String) char형 배열 string형
그림. char형 배열 string형

 

1.4 요소(Element), 인덱스(Index)

 

string도 배열이기 때문에, 배열의 변수 하나 하나인 요소와 그 변수들의 주소 격인 인덱스를 가집니다.

인덱스는 0부터 시작됩니다.

 

using UnityEngine; 

public class StringExample : MonoBehaviour 
{ 
    void Start() 
    { 

        string title = "Unity C#"; // 문자열 변수 
        char c = 'A'; // 문자 변수 
        Debug.Log(title); // 출력 : Unity C# 
        Debug.Log(c); // 출력 : A 
    } 
}

 

 

2. 문자 문자열 변환

 

2.1. 인덱스 접근

 

문자열은 문자들의 배열이기 때문에, [인덱스]를 사용하여 접근할 수 있습니다.

 

using UnityEngine; 

public class StringIndex : MonoBehaviour 
{ 
    void Start() 
    { 
        string name = "Coder Zero"; // 인덱스는 0, 1, 2 ...9 까지 됩니다. 빈칸도 인덱스에 포함됩니다. 
        Debug.Log(name[2]); // 출력 : d 
    } 
}

 

코더제로 유니티 C# 강좌 문자열(String) 인덱스 접근
그림. 인덱스 접근

 

2.2. 문자열  문자 : ToCharArray 메서드

 

문자열에서 문자 배열로 변환할 때 사용되는 메서드입니다.

 

using UnityEngine; 

public class StringToCharArray : MonoBehaviour 
{ 
    void Start() 
    { 
        string name = "Coder Zero"; 
        char[] charArrays = name.ToCharArray(); // name문자열이 charArrays 문자 배열로 변환함. 
        Debug.Log(charArrays[1]); // 출력 : o 
    } 
}

 

 

2.3. 문자 → 문자열

 

문자열에 문자 배열을 대입하면 됩니다.

 

using UnityEngine; 

public class CharArrayToString : MonoBehaviour 
{ 
    void Start() 
    { 
        char[] charArray = { 'A', 'B', 'c' }; 
        string s = new string(charArray); 
        Debug.Log(s); // 출력 : ABc          
    } 
}

 

 

3. 문자열 조합

 

문자열을 사용하다 보면, 2개 이상의 문자열을 연결해서 사용해야 하는 경우가 빈번합니다.

문자열 연결은 한 문자열에 다른 문자열을 추가하는 프로세스입니다.

 

 

3.1 문자열 결합 : + 연산자, += 연산자

 

+ 연산자는 문자열을 연결하는 방식입니다.

각 문자열끼리 +로 연결하면 됩니다.

 

+= 연산자는 기존의 문자열에 계산 뒤에 오는 문자열을 추가하는 연산자입니다.

 

사용 방법

// + 연산자
string 변수 이름1 = "값1";
string 변수 이름2 = "값2";
string 변수 이름3 = 변수 이름1 + 변수 이름2; // 결과 : 값1값2

// += 연산자
string 변수 이름1 = "값1";
string 변수 이름2 = "값2";
변수 이름2 += 변수 이름1; // 변수 이름2 = 변수 이름2 + 변수 이름1 와 같은 의미. 결과 : 값1값2

 

using UnityEngine;

public class StringPlusOperator : MonoBehaviour 
{ 
    void Start() 
    { 
        string text = "Coder Zero " + "Unity C#"; 
        Debug.Log(text); // 출력 : Coder Zero Unity C#   
    } 
}

 

사용법은 간단하나, 문자열은 참조 방식이기 때문에, + 연산자를 사용할 때마다 새로운 메모리를 할당하기 때문에, 추후에 가비지 캘렉션(GC, Garbage Collection)이 발생하기 때문에 자주 사용되는 곳에서는 사용을 권장하지 않습니다.

 

 

3.2 StringBuilder 클래스

 

지금까지 문장열에서 사용된 클래스는 String 클래스입니다.

하지만, 여기에서는 StringBuilder 클래스를 설명합니다.

 

 

불변 객체(Immutable Object)와 가변 객체(Mutable Object)

 

객체 지향 프로그래밍에서는 불변 객체(Immutable Object)와 가변 객체(Mutable Object)가 있습니다.

가변 객체는 객체의 값을 계속 바꿀 수 있지만, 불변 객체는 한번 선언하면 그 값을 바꿀 수 없고, 만약 값을 바꾸게 되면 새로운 객체를 생성하여 데이터로 초기화한 후 이 값을 변수에 할당합니다.

즉 내부적으로 전혀 다른 메모리를 참조하는 것입니다.

그리고 이때마다 메모리 낭비와 가비지 컬렉션이 발생합니다.

String은 불변 객체입니다. 

 

예제 : 불변 객체
string name = "Coder Zero";
name = "Coder One"; // 새로운 객체 생성. 데이터 초기화 후 값 할당

 

하지만, StringBuilder는 가변 객체입니다.

 

네임스페이스
using System.Text;

 

사용 방법
using System.Text; // using문 추가
...
StringBuilder 변수-이름 = new StringBuilder("값1");
변수-이름.Append("값2");
...

 

 

StringBuilder.Append는 현재 Stringbuilder 문자열 끝에 다음 문자열을 추가해 줍니다.

 

using UnityEngine; 
using System.Text; 

public class StringBuilderExample : MonoBehaviour 
{ 
    void Start() 
    { 
        StringBuilder sb = new StringBuilder("stringBuilder1"); 
        sb.Append("stringBuilder1"); 
        Debug.Log(sb); // 출력 : stringBuilder1stringBuilder1 
    } 
}

 

 

StringBuilder는 다음과 같은 메드를 가지고 있습니다.

 

드 이름

사용 

StringBuilder.Append

현재 StringBuilder의 끝에 정보를 추가합니다. 

StringBuilder.AppendFormat 

문자열에 전달된 형식 지정자를 서식 있는 텍스트로 바꿉니다. 

StringBuilder.Clear

현재 문자열 변수를 빈칸으로 바꿉니다.

StringBuilder.Insert

현재 StringBuilder의 지정된 인덱스에 문자열 또는 개체를 삽입합니다. 

StringBuilder.Remove

현재 StringBuilder에서 지정된 수의 문자를 제거합니다.

StringBuilder.Replace

지정된 인덱스에서 지정된 문자를 바꿉니다.

 

using UnityEngine; 
using System.Text; 

public class StringBuilderExample : MonoBehaviour 
{ 
    void Start() 
    { 
        StringBuilder sb1 = new StringBuilder("Coder "); 
        sb1.Append("Zero"); 
        Debug.Log(sb1); // 출력 : Coder Zero 

        StringBuilder sb2 = new StringBuilder("Unity #"); 
        sb2.Insert(6, "C"); 
        Debug.Log(sb2); // 출력 : Unity C# 

        StringBuilder sb3 = new StringBuilder("Coder Zero"); 
        sb3.Remove(6, 3); 
        Debug.Log(sb3); // 출력 : Coder o 

        StringBuilder sb4 = new StringBuilder("Coder zero"); 
        sb4.Replace('z', 'Z'); 
        Debug.Log(sb4); // 출력 : Coder Zero 

        StringBuilder sb5 = new StringBuilder("Coder Zero Visual C#"); 
        sb5.Replace("Visual", "Unity"); 
        Debug.Log(sb5); // 출력 : Coder Zero Unity C# 

        StringBuilder sb6 = new StringBuilder("Coder Zero unity C#"); 
        sb6.Replace('u', 'U', 0, 12); 
        Debug.Log(sb6); // 출력 :  Coder Zero Unity C# 
    } 
}

 

 

3.3 문자 이스케이프(Escape) 시퀀스

 

문자 백 슬래시(\)는 특수 문자 중에서도 C 기반의 언어(C, C++, Java, C# 등) 문자에서 특수한 기능을 가진 문자입니다.

문자열에서 백 슬래시(\)+특정 문자 형태를 사용하여, 문자열에서 특수 문자나 특수 기능을 수행해 줍니다.

 

요즘은 C#에서는 문자열 보간 $와 약어 식별자 @ 때문에 많이 사용되지 않지만 그래도 알아 두시는 것이 좋습니다.

디렉터리를 표시하는 path = "C:\\Users\\coderzero\\Documents\\";

또는 줄 바꿈을 나타내는 \n이 주로 사용되었습니다.

 

이스케이프 시퀀스

문자 이름

\'

작은 따옴표

\"

큰 따옴표

\\

백 슬래시

\0

Null

\a

경고

\b

백스페이스

\f

폼 피드

\n

줄 바꿈

\r

캐리지 리턴

\t

가로 탭

\v

세로탭

\u

유니코드 이스케이프 시퀀스(UTF-16)

\U

유니코드 이스케이프 시퀀스(UTF-32)

\x

길이가 변하는 경우를 제외하고 “\u”유사

 

using UnityEngine; 

public class StringEscapeSequences : MonoBehaviour 
{ 
    void Start() 
    { 
        string path = "C:\\Users\\coderzero\\Documents\\"; 

        Debug.Log(path); // 출력 :  C:\Users\coderzero\Documents\" 

        string escapeSequences = "Coder Zero\n" + "Unity C#"; 
        Debug.Log(escapeSequences); 
        // 출력 :   
        // Coder Zero   
        // Unity C#    
    } 
}

 

 

3.4 약어 식별자 @

 

약어식별자 @는 해당 문자열 안의 문자 이스케이프를 무시합니다

@ 다음에 오는 문자열을 그대로 인식하여, 문자열로 처리해 줍니다.

 

사용 방법

string 변수-이름 = @"값";
string path = @"C:\Users\coderzero\Documents\";

 

이 역시 디렉터리를 나타내거나, 줄 바꿈에 요긴하게 사용됩니다.

 

using UnityEngine; 

public class VerbatimString : MonoBehaviour 
{ 
    void Start() 
    { 
        string path1 = "C:\\Users\\coderzero\\Documents\\"; 
        string path2 = @"C:\Users\coderzero\Documents\"; 

        Debug.Log(path1); // 출력 : C:\Users\coderzero\Documents\  
        Debug.Log(path2); // 출력 : C:\Users\coderzero\Documents\  

        string s3 = 
@"Coder Zero  
Unity C#";  // 약어 식별자 @를 사용하게 되면, 비주얼 스튜디오 줄 맞춤이 예와 같이 바뀝니다. 
         
        Debug.Log(s3); 
        // 출력 :   
        // Coder Zero   
        // Unity C#    
    } 
}

 

 

3.5 문자열 보간 $

 

문자열 보간은 C#6에서 새로 추가된 기능입니다.

문자열 보간은 특수문자 $를 사용하고 중괄호 안에 보간 된 식을 포함하면 됩니다.

 

사용 방법

$"고정문자열 {보간된-식} 고정문자열"

 

using UnityEngine;

public class StringInterpolationExample : MonoBehaviour 
{ 
    void Start() 
    { 
        float a = 1; 
        float b = 2; 

        Debug.Log($"c = {a} d = {b} c + d = {a+b}"); // 출력 : c = 1 d = 2 c + d = 3 
    } 
}

 

 

 

3.6 ToString 메서드

 

ToString 메서드는 데이터 형식을 문자열로 변환해 줍니다.

 

사용방법은 데이터 형식 뒤에 .ToString()메드를 붙이면 됩니다.

 

사용 방법

변수-이름.ToString();

 

using UnityEngine; 

public class ToStringExample : MonoBehaviour 
{ 
    void Start() 
    { 
        int i = 1; 
        Debug.Log(i.ToString()); // 출력 : 1   

        bool b = true; 
        Debug.Log(b.ToString()); // 출력 : True   
    } 
}

 

 

3.7 Format 메서드

 

Format 메드는 고정 문자열과 인덱싱 된 자리 표시자(서식 항목)와  결합 형태입니다.

쉽게 얘기해서, 문장에서 일부분만 바꾸면서 사용하는 형태입니다.

이런 형태의 문자열을 합성 서식 문자열이라고 합니다.

 

설명

분석

나는 아이언맨입니다.나는 어벤져스입니다.
나는 슈퍼맨입니다. 나는 저스티스입니다.
나는 헐크입니다. 나는 어벤져스입니다.
나는 ... 입니다. 나는 ... 입니다. : 고정 문자열
아이언맨슈퍼맨헐크 0번 아규먼트
어벤저스저스티스 1번 아규먼트

 

사용 방법은 Format("고정 문자열... 인덱스", 아규먼트...);으로 사용하면 됩니다.

 

사용 방법

Format("...{0}...{1}...", 아규먼트0, 아규먼트1,...); 

 

0, 1... 은 인덱스로 아규먼트에 들어갈 값의 문자열이 들어갈 자리이며, 인덱스와 아규먼트는 짝을 이루며, 아규먼트의 값이 인덱스 위치에 들어가서 문자열을 완성합니다.

 

코더제로 유니티 C# 강좌 문자열(String) 인덱스와 아규먼트
그림. 인덱스와 아규먼트

 

인덱스에 같은 값이 들어가도 상관없습니다.

 

코더제로 유니티 C# 강좌 문자열(String) 같은 값의 인덱스
그림. 같은 값의 인덱스

 

Format 메드는 아래와 같은 형태로 확장하여 사용됩니다.

* string.Format : 문자열

* StringBuilder.AppendFormat : StringBuilder에서의 stringFormat

* Debug.LogFormat : 유니티에서의 로그

 

using UnityEngine; 

public class FormatExample : MonoBehaviour 
{ 
    void Start() 
    { 
        Debug.LogFormat("I am {0}. I am {1} years old.", "Iron Man", 55); // 출력 : I am Iron Man. I am 55 years old.  
        Debug.LogFormat("I am {0}. I am {1} years old.", "Super Man", 100); // 출력 : I am Super Man. I am 100 years old.  
        Debug.LogFormat("I am {0}. I am {0}. ", "Thor"); // 출력 : I am Thor. I am Thor.  
    } 
}

 

 

서식 항목 구문

 

위 설명에서는 인덱스와 아규먼트의 관계를 설명하기 위해서 {} 안에 인덱스만 나타냈지만,

원래는 인덱스, 정렬(Alignment), 형식 문자열(Format String)로 구성되어 있습니다.

 

하지만, 정렬과 형식 문자열은 생략해도 됩니다.

 

사용 방법

Format("...{인덱스,정렬:형식문자열}...", 아규먼트...); 

 

정렬은 값의 필드 너비를 나타내는 부호 있는 정수입니다. 

양수이면 필드에서 형식이 지정된 데이터가 오른쪽 맞춤이 되고, 음수이면 왼쪽 맞춤이 됩니다.

채우기가 필요하면 공백이 사용됩니다.

 

using UnityEngine; 

public class Variable : MonoBehaviour 
{ 
    void Start() 
    { 
        string[] names = { "Iron Man", "Super Man" }; 
        int[] ages = { 55, 100 }; 

        Debug.LogFormat("{0,-20} {1,5}", "Name", "Age"); 
        Debug.LogFormat("{0,-20} {1,5:N1}", names[0], ages[0]); 
        Debug.LogFormat("{0,-20} {1,5:N1}", names[1], ages[1]); 
         
        // 출력 : 
        // Name                   Age 
        // Iron Man              55.0 
        // Super Man            100.0 
    } 
}

 

 

형식 문자열은 사용자 지정 숫자 형식 문자열과 표준 숫자 형식 문자열이 있습니다.

 

 

3.8 사용자 지정 숫자 형식 문자열 (Custom numeric format strings)

 

사용자 지정 숫자 형식 문자열은 숫자에서 문자열로 바꿀 때, 소수점 자리수나 10진수 자리 표시 등을 할 때 사용됩니다.

사용자 지정 숫자 형식 문자열은 ToString 메드와 Format 메드에서 사용합니다.

 

사용 방법

변수.ToString("형식-지정자");
Format("고정-문자열 {인덱스:형식-지정자}고정-문자열 ", 아규먼트);

 

형식 지정자

이름

설명

예제

"0"

0자리 표시자

해당 숫자가 있을 경우 0을 해당 숫자로 바꾸고, 그렇지 않으면 결과 문자열에 0을 표시합니다.

1234.56("00000") 01235

"#"

10진수 자리 표시자

해당 숫자가 있을 경우 "#" 기호를 해당 숫자로 바꾸고, 그렇지 않으면 결과 문자열에 숫자를 표시하지 않습니다.

1234.56("#####") 1235

"."

소수점

결과 문자열에서 소수 구분 기호의 위치를 결정합니다.

0.45678("0.00") 0.46

','

천자리

숫자를 쉼표 단위로 끊어서 1000으로 나눕니다.

12345("#,#") →12,345

 

using UnityEngine; 

public class CustomNumericFormatStringsExample : MonoBehaviour 
{ 
    void Start() 
    { 
        float value1 = 123; 

        Debug.Log(value1.ToString("00000")); // 출력 : 00123  
        Debug.Log(string.Format("value1 is {0:00000}", value1)); // 출력 : value1 is 00123  

        Debug.Log(value1.ToString("#####")); // 출력 : 123  
        Debug.Log(string.Format("value1 is {0:#####}", value1)); // 출력 : value1 is 123 

        float value2 = 1.23f; 
        Debug.Log(value2.ToString("0.0")); // 출력 : 1.2  
        Debug.Log(string.Format("value2 is {0:0.00}", value2)); // 출력 : value2 is 1.23 


        float value3 = 1234567890; 
        Debug.Log(value3.ToString("#,#")); // 출력 : 1,234,568,000  
        Debug.Log(string.Format("value3 is {0:#,#}", value3)); // 출력 : value3 is 1,234,568,000  
    } 
}

 

 

3.9 표준 숫자 형식 문자열 (Standard Numeric Format Strings)

 

표준 숫자 서식 문자열은 일반 숫자 형식의 서식을 지정하는 데 사용됩니다. 

표준 숫자 서식 문자열을 사용하게 되면, 일반 숫자를 통화값, 백분율, 16진수 등의 문자열로 바꿀 수 있습니다.

 

표준 숫자 서식은 Axx 형식을 취합니다.

 

문법

Axx

 

A는 서식지정자라는 단일 영문자이고,

xx는 전체 자리수로 0 ~ 99 정수로 결과의 자리수에 영향을 줍니다.

 

표준 숫자 서식 문자열은 ToString 메드와 Format 메드에서 사용합니다.

 

 

 

사용 방법

변수.ToString("형식-지정자");
Format("고정-문자열 {인덱스:형식-지정자고정-문자열", 아규먼트);

 

형식 지정자

결과

전체 자리수

C, c

통화값

십진수의 수

123.456 ("C")  $123.46

-123.456 ("C3")  -123,456

D, d

10진수

최소 자리수

1234 ("D")  1234

-1234 ("D6")  -001234

E, e

지수

십진수의 수

1052.0329112756 ("E")  1.052033E+003

-1052.0329112756 ("e2")  -1.05e+003

F, f

고정 소수점

십진수의 수

1234.567 ("F")  1234.57

-1234.56 ("F4")  -1234.5600

G, g

일반

유효 자리수

-123.456 ("G")  -123.456

-1.234567890e-25 ("G")  -1.23456789E-25

N, n

숫자

원하는 소수 자리수

1234.567 ("N")  1,234.57

-1234.56 ("N3")  -1 234,560

P, p

백분율

원하는 소수 자리수

1 ("P")  100.00 %

-0.39678 ("P1")  -39,7 %

X, x

16진수

결과 문자열의 자리수

255 ("X")  FF

255 ("x4")  00ff

-1 ("X4")  00FF

 

using UnityEngine; 

public class StandardNumericFormatStringsExample : MonoBehaviour 
{ 
    void Start() 
    { 
        Debug.Log(123.456f.ToString("C")); // 출력 : ₩123   
        Debug.Log(string.Format("C Example {0:C}", 123.456f)); // 출력 : C Example ₩123  

        Debug.Log(1234.ToString("D")); // 출력 : 1234  
        Debug.Log(string.Format("D6 Example {0:D6}", -1234)); // 출력 : D6 Example -001234  

        Debug.Log(1052.0329112756f.ToString("E")); // 출력 : 1.052033E+003  
        Debug.Log(string.Format("{0:e2}", -1052.0329112756f)); // 출력 : -1.05e+003  

        Debug.Log(1234.567f.ToString("F")); // 출력 : 1234.57  
        Debug.Log(string.Format("{0:F4}", -1234.56f)); // 출력 : -1234.5600  

        Debug.Log(1234.567f.ToString("N")); // 출력 : 1,234.57   
        Debug.Log(string.Format("{0:N3}", -1234.56f)); // 출력 : -1,234.560  

        Debug.Log(1.ToString("P")); // 출력 : 100.00 %  
        Debug.Log(string.Format("{0:P1}", -0.39678f)); // 출력 : -39.7 %  

        Debug.Log(255.ToString("X")); // 출력 : FF  
        Debug.Log(string.Format("{0:x4}", 255)); // 출력 : 00ff  
        Debug.Log(string.Format("{0:X4}", -1)); // 출력 : FFFFFFFF  
    } 
}

 

 

3.10 CultureInfo 클래스

 

CultureInfo 클래스는 특정 문화권(한국, 미국, 중국 등...)에 대한 정보를 제공합니다.

이 정보에는 문화권 이름, 쓰기 시스템, 사용된 달력, 문자열의 정렬 순서, 날짜 및 숫자 형식이 포함되어 있습니다.

ToString 메드와 Format 메드에서 사용자 지정 숫자 형식 문자열과 표준 숫자 형식 문자열을 함께 사용하면 됩니다, 

 

사용방법은 using 지시문에서 System.Globalization 형식을 가져오고, CultureInfo 선언을 하고 사용하면 됩니다.

 

사용 방법 : CultureInfo 클래스
using System.Globalization;
...
CultureInfo 변수-이름 = new CultureInfo(name);
...
변수.ToString("형식-지정자", CultureInfo변수);
Format(CultureInfo변수, "고정-문자열 {인덱스:형식 지정자} 아규먼트);

 

 

메서드 및 변수

 

분류

이름

내용

메서드

CurrentCulture

현재 윈도우가 설정되어 있는 국가나 지역 및 언어

CreateSpecificCulture

원하는 국가 언어를 적용

변수

name

국가별 언어 코드

DisplayName

국가 이름

 

 

국가별 언어 코드 [전체 국가별 언어 코드로 바로 가기]

 

Code

Name

Code

Name

de-DE

German (Germany)

ja-JP

Japanese (Japan)

en-GB

English (United Kingdom)

ko-KR

Korean (Korea)

en-US

English (United States)

pl-PL

Polish (Poland)

es-ES

Spanish (Spain)

ru-RU

Russian (Russia)

fr-FR

French (France)

zh-CN

Chinese (S)

it-IT

Italian (Italy)

   

 

using UnityEngine; 
using System.Globalization; 

public class CultureInfoExample : MonoBehaviour 
{ 
    void Start() 
    { 
        Debug.Log(CultureInfo.CurrentCulture.Name); // 출력 : ko-KR  

        CultureInfo cultureInfo = new CultureInfo("en-US"); 
        Debug.Log(cultureInfo.DisplayName); // 출력 : English (United States)  

        float value = 123.45f; 
        Debug.Log(value.ToString("C", CultureInfo.CurrentCulture)); // 출력 :₩123  
        Debug.Log(string.Format(CultureInfo.CreateSpecificCulture("ja-JP"), "{0:C3}", value)); // 출력 : ¥123.450  
    } 
}

 

 

윈도우 10에서 지역 및 언어 설정

 

CurrentCulture은 현재 윈도우10 제어판의 지역의 정보를 가져옵니다.

지역 정보를 보고 싶으면, 제어판 > 시간 및 언어 > 지역에 들어가면 정보를 확인할 수 있으며, 변경도 가능합니다.

 

① 제어판 클릭

 

코더제로 유니티 C# 강좌 문자열(String) 제어판 클릭

 

 ② Windows 설정 창에서 시간 및 언어 클릭

 

코더제로 유니티 C# 강좌 문자열(String) Windows 설정창
그림. Windows 설정창

 

 ③ 시간 및 언어 창에서 지역 클릭

 

코더제로 유니티 C# 강좌 문자열(String) 시간 및 언어창 지역탭
그림. 시간 및 언어창 지역탭

 

 ④ 만약 국가 또는 지역이나 사용지역 언어를 변경하였다면, 유니티 에디트를 다시 시작하여야 적용이 됩니다. 

 

 

3.11 표준 날짜 및 시간 형식 문자열

 

표준 날짜 및 시간 서식 문자열은 단일 서식 지정자를 사용하여 날짜 및 시간 값의 텍스트 표현을 정의합니다.

공백을 포함하여 문자가 두 개 이상 포함된 날짜 및 시간 서식 문자열은 사용자 지정 날짜 및 시간 서식 문자열로 해석됩니다.

 

형식 지정자

설명

예제

d

간단 날짜 패턴

2019-06-15T13:45:30 6/15/2009 (en-US)

2009-06-15T13:45:30  2019年10月20日 (ja-JP)

D

자세한 날짜 패턴

2009-06-15T13:45:30 Monday, June 15, 2009 (en-US)

2019-06-15T13:45:30 15 июня 2019 г. (ru-RU)

f

전체 날짜/시간 패턴

(간단한 시간)

2009-06-15T13:45:30 Monday, June 15, 2009 1:45 PM (en-US)

2009-06-15T13:45:30 Δευτέρα, 15 Ιουνίου 2009 1:45 μμ (el-GR)

F

전체 날짜/시간 패턴

(자세한 시간)

2009-06-15T13:45:30 Monday, June 15, 2009 1:45:30 PM (en-US)

2009-06-15T13:45:30 Δευτέρα, 15 Ιουνίου 2009 1:45:30 μμ (el-GR)

g

일반 날짜/시간 패턴

(간단한 시간)

2009-06-15T13:45:30 6/15/2009 1:45 PM (en-US)

2009-06-15T13:45:30 2009/6/15 13:45 (zh-CN)

G

일반 날짜/시간 패턴

(자세한 시간)

2009-06-15T13:45:30 6/15/2009 1:45:30 PM (en-US)

2009-06-15T13:45:30 15/06/2009 13:45:30 (es-ES)

M, m

월/일 패턴

2009-06-15T13:45:30 June 15 (en-US)

2009-06-15T13:45:30 15 Juni (id-ID)

t

간단한 시간 패턴

2009-06-15T13:45:30 1:45 PM (en-US)

2009-06-15T13:45:30 01:45 م (ar-EG)

T

자세한 시간 패턴

2009-06-15T13:45:30 1:45:30 PM (en-US)

U

유니버설

전체 날짜/시간 패턴

2009-06-15T13:45:30 Monday, June 15, 2009 8:45:30 PM (en-US)

Y, y

연도 월 패턴

2009-06-15T13:45:30 June, 2009 (en-US)

 

using UnityEngine; 
using System; 
using System.Globalization; 

public class StandardDateTimeFormatStringsExample : MonoBehaviour 
{ 
    void Start() 
    { 
        DateTime dataTime = new DateTime(2019, 10, 20, 10, 23, 34); 

        Debug.Log(dataTime.ToString("d", CultureInfo.CreateSpecificCulture("en-US"))); // 출력 : 10/20/2019  
        Debug.Log(string.Format(CultureInfo.CreateSpecificCulture("ko-KR"), "한국 {0:d}", dataTime)); // 출력 : 한국 2019-10-20  

        Debug.Log(dataTime.ToString("D", CultureInfo.CreateSpecificCulture("ja-JP"))); // 출력 : 2019年10月20日  
        Debug.Log(string.Format(CultureInfo.CreateSpecificCulture("ko-KR"), "{0:D}", dataTime)); // 출력 : 2019년 10월 20일 일요일  

        Debug.Log(dataTime.ToString("F", CultureInfo.CreateSpecificCulture("en-US"))); // 출력 : Sunday, October 20, 2019 10:23:34 AM  
        Debug.Log(string.Format(CultureInfo.CreateSpecificCulture("ko-KR"), "{0:f}", dataTime)); // 출력 : 2019년 10월 20일 일요일 AM 10:23  

        Debug.Log(dataTime.ToString("U", CultureInfo.CreateSpecificCulture("en-US"))); // 출력 : Sunday, October 20, 2019 1:23:34 AM  
        Debug.Log(string.Format(CultureInfo.CreateSpecificCulture("ko-KR"), "{0:y}", dataTime)); // 출력 : 2019년 10월  
    } 
}

 

 

3.12 사용자 지정 날짜 및 시간 서식 문자열

 

사용자 지정 형식 문자열은 하나 이상의 사용자 지정 날짜 및 시간 형식 지정자로 구성됩니다.

표준 날짜 및 시간 형식 문자열이 아닌 문자열은 사용자 지정 날짜 및 시간 형식 문자열로 해석됩니다.

 

형식 지정자

설명

예제

y

0부터 99까지의 연도

2009-06-15T13:45:30 9

yy

00부터 99까지의 연도

2019-06-15T13:45:30 19

yyyy

네 자리 숫자로 된 연도

2019-06-15T13:45:30 2019

M

1부터 12까지의 월

2019-06-15T13:45:30 6

MM

01부터 12까지의 월

2019-06-15T13:45:30 06

MMM

월의 약식 이름

2019-06-15T13:45:30 Jun (en-US)

MMMM

월의 전체 이름

2019-06-15T13:45:30 June (en-US)

d

1부터 31까지의 일(월 기준)

2019-06-01T13:45:30 1

dd

01부터 31까지의 일(월 기준)

2019-06-01T13:45:30 01

h

12시간 형식을 사용하는 1부터 12까지의 시간

2019-06-15T13:45:30 1

hh

12시간 형식을 사용하는 01부터 12까지의 시간

2019-06-15T13:45:30 01

H

24시간 형식을 사용하는 0부터 23까지의 시간

2019-06-15T13:45:30 13

HH

24시간 형식을 사용하는 00부터 23까지의 시간

2019-06-15T01:45:30 01

m

0부터 59까지의 분

2019-06-15T13:29:30 29

mm

00부터 59까지의 분

2019-06-15T01:09:30 09

s

0부터 59까지의 초

2019-06-15T13:45:09 9

ss

00부터 59까지의 초

2019-06-15T13:45:09 09

ddd

요일의 약식 이름

2019-06-15T13:45:30 Mon (en-US)

dddd

요일의 전체 이름

2019-06-15T13:45:30 Monday (en-US)

 

using UnityEngine;
using System;
using System.Globalization;

public class CustomDateTimeFormatStringsExample : MonoBehaviour
{
    void Start()
    {
        DateTime dataTime = new DateTime(2019, 10, 20, 10, 23, 34);

        Debug.Log(string.Format("{0:yyyyMMdd_HHmmss}", dataTime)); // 출력 : 20191020_102334
        Debug.Log(dataTime.ToString(dataTime.ToString("d, M", CultureInfo.InvariantCulture))); // 출력 : 20, 10  
        Debug.Log(string.Format(CultureInfo.CreateSpecificCulture("ko-KR"), "한국 {0:d} {0:ddd}", dataTime)); // 출력 :한국 2019-10-20 일   
    }
}

 

 

4. 기본 문자열 작업

 

문자열은 각종 메드를 이용하여, 문자열을 편집할 수 있습니다.

 

기능

string.Concat

둘 이상의 문자열에서 문자열을 작성합니다.

string.Join

문자열 배열을 결합하여 새 문자열을 작성합니다.

string.Insert

기존 문자열의 지정된 인덱스에 문자열을 삽입하여 새 문자열을 작성합니다.

string.Trim

문자열의 시작과 끝에서 문자 배열에 지정된 문자 또는 공백을 제거합니다.

string.TrimEnd

문자열의 끝에서 문자 배열에 지정된 문자를 제거합니다.

string.TrimStart

문자열의 시작에서 문자 배열에 지정된 문자를 제거합니다.

string.Remove

문자열의 지정한 인덱스 위치에서 지정한 개수의 문자를 제거합니다.

string.PadLeft

선행 문자로 문자열의 지정한 총 길이를 채웁니다.

string.PadRight

후행 문자로 문자열의 지정한 총 길이를 채웁니다.

string.Compare

두 문자열의 값을 비교합니다. 정수 값을 반환합니다.

string.CompareTo

현재 문자열 개체를 다른 문자열과 비교합니다. 정수 값을 반환합니다.

string.StartsWith

문자열이 전달된 문자열로 시작하는지 여부를 확인합니다. 부울 값을 반환합니다.

string.EndsWith

문자열이 전달된 문자열로 끝나는지 여부를 확인합니다. 부울 값을 반환합니다.

string.Equals

두 문자열이 같은지 여부를 확인합니다. 부울 값을 반환합니다.

string.IndexOf

검사 중인 문자열의 처음부터 시작하여 문자 또는 문자열의 인덱스 위치를 반환합니다. 정수 값을 반환합니다.

string.LastIndexOf

검사 중인 문자열의 끝부터 시작하여 문자 또는 문자열의 인덱스 위치를 반환합니다. 정수 값을 반환합니다.

string.ToUpper

문자열의 모든 문자를 대문자로 변환합니다.

string.ToLower

문자열의 모든 문자를 소문자로 변환합니다.

string.Contains

문자열에서 비교 문자열이 포함되었는지를 확인합니다.

 

using UnityEngine; 

public class BasicStringOperationsExample : MonoBehaviour 
{ 
    void Start() 
    { 
        string s1 = "Coder Zero"; 
        string s2 = "Unity C#"; 
        Debug.Log(string.Concat(s1, ' ', s2)); // 출력 : Coder Zero Unity C#  

        string[] s3s = { "Iron Man", "Captain America", "Hulk" }; 
        Debug.Log(string.Join(" ", s3s)); // 출력 : Iron Man Captain America Hulk  

        string s4 = "AEFG"; 
        Debug.Log(s4.Insert(1, "bcd")); // 출력 : AbcdEFG  

        string s5 = " abcdefghi "; 
        Debug.Log(s5.Trim()); // 출력 : abcdefghi  

        string s6 = " ab cd efg hi "; 
        char[] charArray1s = { 'i', 'h', 'g', ' ' }; // 뒤에서부터 확인하는데, 순서는 중요하지 않음.  
        Debug.Log(s6.TrimEnd(charArray1s)); // 출력 :  ab cd ef  

        string s7 = "abcdefghi"; 
        char[] charArray2s = { 'b', 'a', 'c' }; 
        Debug.Log(s7.TrimStart(charArray2s)); // 출력 : defghi  

        string s8 = "01234567"; 
        Debug.Log(s8.Remove(1, 3)); // 출력 : 04567  

        string s9 = "012"; 
        Debug.Log(s9.PadLeft(5, '*')); // 출력 : **012  

        string s10 = "012"; 
        Debug.Log(s10.PadRight(5, '*')); // 출력 : 012**  

        string s11 = "string"; 
        string s12 = "String"; 
        Debug.Log(string.Compare(s11, s12)); // 출력 : -1  
        Debug.Log(s11.CompareTo(s12)); // 출력 : -1  

        string s13 = "string"; 
        string s14 = "string"; 
        Debug.Log(s13.Equals(s14)); // 출력 : True  

        string s15 = "string"; 
        string s16 = "string"; 
        Debug.Log(string.Equals(s15, s16)); // 출력 : True  

        string s17 = "string"; 
        string s18 = "str"; 
        Debug.Log(s17.StartsWith(s18)); // 출력 : True  

        string s19 = "string"; 
        string s20 = "ng"; 
        Debug.Log(s19.EndsWith(s20)); // 출력 : True  

        string s21 = "string"; 
        Debug.Log(s21.IndexOf('r')); // 출력 : 2  

        string s22 = "abcddef"; 
        Debug.Log(s22.IndexOf('d')); // 출력 : 3  

        string s23 = "AbcDE"; 
        Debug.Log(s23.ToUpper()); // 출력 : ABCDE  

        string s24 = "AbcDE"; 
        Debug.Log(s24.ToLower()); // 출력 : abcde 

        string s25 = "AbcDE"; 
        string s26 = "cD"; 
        Debug.Log(s25.Contains(s26)); // 출력 : True 
    } 
}

 

728x90
반응형