언리얼에서는 복잡한 문자열 처리를 하나로,
유니코드를 사용해 문자열 처리를 통일합니다
문자열은 기본적으로 TCHAR 의 배열이다
문자열을 조작하고 싶으면 TCHAR 배열을 건드리는 것이 아니라 , FString 을 사용하도록 한다.
TCHAR CharArray[] = TEXT("Unreal Character");
UE_LOG(LogTemp, Log, LogCategory); // 매크로의 3번째 인수는 항상 배열만 된다.
FString LogCharString = CharArray; // TCHAR 배열을 받을 수 있다.
UE_LOG(LogTemp, Log, TEXT("%s"), *LogCharString);
// FString 에서 문자열 배열을 가져오려면 포인터연산을 수행해주어야 한다.
// 포인터 연산을 수행해야. FString 이 감싸고 있는 문자열을 반환한다.
FString 은 안에 TArray를 관리하고 있어서 TCHAR 를 보관한다. 또한 FString 이 제공하는 함수들은, 내부적으로 FCString 클래스가 있으며, 이것은 C 라이브러리에서 제공하는 C 함수를 포함하는 클래스 이다. 문자열을 찾거나 자르거나 합치는 함수 같은것은 FCString 을 이용한다.
FString str = TEXT("str");
FString ResultString = FString::Printf(TEXT(" integer : %d, float : %.2f , string : %s"), 10, 0.02,*str );
예 ) 문자열을 찾는 strstr 을 사용
// TEXT 매크로는 TCHAR 배열을 반환합니다.
TCHAR LogCharArray[] = TEXT("Hello Unreal");
UE_LOG(LogTemp,Log, LogCharArray);
// TCHAR 배열로 FString 초기화 하기, UE_Log 는 문자열(문자 배열)을 받습니다.
FString LogCharString = LogCharArray;
UE_LOG(LogTemp, Log, TEXT("%s"), *LogCharString);
// FString 의 포인터 연산은 const TCHAR* 를 반환합니다. 즉 포인터 연산으로 받은 문자열은 수정할 수 없습니다.
const TCHAR* LogCharPtr = *LogCharString;
// FString 의 내부 Array 에 접근하여 data 를 받으면 문자열을 수정할 수 있습니다. 포인터연산을 통해
TCHAR* LogCharDataPtr = LogCharString.GetCharArray().GetData();
// 수정할 수 있는 배열로 받고 싶다면, C 스타일의 함수를 사용해야 합니다
TCHAR LogCharArrayWidthSize[100];
TCString::Strcpy(LogCharArrayWidthSize, LogCharString.Len(), *LogCharString);
// 특정 문자열이 있는지 검사
if(LogCharString.Contains(TEXT("unreal"), ESearchCase::IgnoreCase))
{
// 몇번째 인덱스에 있는지 찾아보기
int32 Index = LogCharString.Find(TEXT("unreal"), ESearchCase::IgnoreCase));
// 자르기
FString EndString = LogCharString.Mid(Index); // "Unreal"
}
// 나누기
FString Left, Right;
if(LogCharString.Split(TEXT(" "), &Left, &Right))
{
UE_LOG(LogTemp, Log, TEXT("Split Test : %s 와 %s"), *Left, *Right);
}
// 정수와 실수 사용
int32 IntValue = 32;
float FloatValue = 3.141592;
FString FloatIntString = FString::Printf(TEXT(" Int : %d, Float : %f"), IntValue, FloatValue);
// Float 를 그대로 스트링으로 바꾸기. (float 은 내부적으로 규약이 복잡하여 정제할 필요가 있다. 때문에 SanitizeFloat 을 사용한다)
FString FloatString = FString::SanitizeFloat(FloatValue);
// Integer 를 그대로 스트링으로 바꾸기
FString IntString = FString::FromInt(IntValue);
// FString 을 float 으로 바꾸기
float FloatValueFromString = FCString::Atof(*FloatString);
// FSTring 을 int 로 바꾸기
int IntValueFromString = FCString::Atoi(*IntString)