【UE5】よく使いそうなFString関数まとめ (C++)

プログラマーの尾関です。

今回は Unreal Engineでの文字列操作を行うときに重要な文字列クラス「FString」のよく使いそうな関数をまとめてみました。

  • 動作確認バージョン:UE 5.6.1

目次

基本操作

Len(): 長さ取得

Len() は文字列の長さを取得します。

	FString Str = TEXT("Hello");
	int32 Len = Str.Len(); // 5
	UE_LOG(LogTemp, Log, TEXT("Length of string '%s' is: %d"), *Str, Len); // Length of string 'Hello' is: 5

IsEmpty(): 空文字判定

IsEmpty() は FStringが空文字かどうかを判定します。

	FString Str = {};
	if (Str.IsEmpty()) {
		// ここが実行される.
		UE_LOG(LogTemp, Log, TEXT("String is empty"));
	}
	else {
		UE_LOG(LogTemp, Log, TEXT("String is not empty"));
	}

Empty(): クリア (空文字にする)

Empty() は文字列を空にします。

	FString Str = TEXT("Hello");
	if (Str.IsEmpty()) {
		UE_LOG(LogTemp, Log, TEXT("String is empty"));
	}
	else {
		// ここが実行される.
		UE_LOG(LogTemp, Log, TEXT("String is not empty"));
	}

	// 文字列を空にする.
	Str.Empty();
	if (Str.IsEmpty()) {
		// ここが実行される.
		UE_LOG(LogTemp, Log, TEXT("String is empty"));
	}
	else {
		UE_LOG(LogTemp, Log, TEXT("String is not empty"));
	}

文字列結合・追加

+ (結合演算子)

	FString A = TEXT("Hello ");
	FString B = TEXT("World");
	FString C = A + B; // "Hello World"
	UE_LOG(LogTemp, Log, TEXT("%s"), *C);

Append(): 追加

	FString A = TEXT("Hello ");
	FString B = TEXT("World");
	FString C = A.Append(B);
	UE_LOG(LogTemp, Log, TEXT("%s"), *C); // "Hello World"

Printf(): 書式指定

Printf()は %s などの書式指定可能なFormat関数です。

	FString Name = TEXT("Unreal Engine");
	float Version = 5.16f;
	FString Msg = FString::Printf(TEXT("Engine: %s, Version: %3.2f"), *Name, Version);
	UE_LOG(LogTemp, Log, TEXT("%s"), *Msg); // "Engine: Unreal Engine, Version: 5.16"

実行結果

[[2025.09.03-02.28.49:842][692]]LogTemp: Engine: Unreal Engine, Version: 5.16

なぜ*FString?

"%s" に FString を渡すときに「*FString」を指定する理由は以下のとおりです。

  • FString は単なる文字列ではなく、TArray<TCHAR> を内部に持つ クラス です。そのままでは printf 系に渡せません
  • FString の * 演算子は、operator* がオーバーロードされていて、TCHAR* を返すようになっています
  • %s フォーマット指定子は Cスタイル文字列 (const TCHAR*) を要求します。
  • そのため、FString を直接渡すのではなく、*Str として 内部バッファの先頭アドレス を渡す必要があります

Printf()にわたすことができる書式と型の対応の一例は以下のとおりです。

データ型書式補足
int32%d・%03d: 3桁0埋め
・%+d: 符号を表示する
int64%lld
uint64%llu
float, double%f・%3.2f: 整数部3桁、小数部2桁
TCHAR%c
*TString (TCHAR*)%s・%15s: 15文字に満たない場合空白

より詳しい書式の設定方法は C言語の printf() の説明ですが、以下のページが参考になります。

部分文字列操作

Mid() / Left() / Right(): 文字列取り出し

	FString Str = TEXT("Hello, Unreal Engine!");
	FString Mid = Str.Mid(7, 6); // "Unreal"
	FString Left = Str.Left(5); // "Hello"
	FString Right = Str.Right(7); // "Engine!"
	UE_LOG(LogTemp, Log, TEXT("Mid: %s, Left: %s, Right: %s"), *Mid, *Left, *Right);

Find(): 文字列検索

	// [0]: H
	// [1]: e
	// [2]: l
	// [3]: l
	// [4]: o
	// [5]: (空白)
	// [6]: W
	// [7]: o
	// [8]: r
	// [9]: l
	// [10]: d
	// [11]: \0 (null文字)

	FString Str = TEXT("Hello World");
	// 部分一致検索 (Worldの開始位置を返す)
	int32 Index = Str.Find(TEXT("World"));
	UE_LOG(LogTemp, Log, TEXT("Index: %d"), Index); // Index: 6

	// "大文字小文字を無視" して "終端" から検索
	int32 LastIndex = Str.Find(TEXT("o"), ESearchCase::IgnoreCase, ESearchDir::FromEnd);
	UE_LOG(LogTemp, Log, TEXT("Last Index: %d"), LastIndex); // Last Index: 7

Find() の引数には以下の2つが指定可能です

  • 大文字小文字を厳密に判定するかどうか
    • ESearchCase::CaseSensitive: 厳密に判定する
    • ESearchCase::IgnoreCase: 大文字小文字を区別しない
  • 検索開始位置 (方向)
    • ESearchDir::FromStart: 文字列の先頭から検索開始
    • ESearchDir::FromEnd: 文字列の終端から検索開始

Replace() / ReplaceInline(): 文字列置換・除去

以下は "World" を "UE" の文字に置き換えます。

	FString Str = TEXT("Hello World");
	// "World"を"UE"に置換.
	FString Replaced = Str.Replace(TEXT("World"), TEXT("UE"));
	UE_LOG(LogTemp, Log, TEXT("%s"), *Replaced); // "Hello UE"

置き換え文字を "" (空文字) にすることで、対象の文字列を除去できます。

	FString Str = TEXT("Hello World");
	// 置き換え文字を "" (空文字) にすることで、対象の文字列を除去できます。
	Str.ReplaceInline(TEXT("World"), TEXT(""));
	UE_LOG(LogTemp, Log, TEXT("%s"), *Str); // "Hello "
Information

ReplaceInline()内部のバッファを直接置き換えます。戻り値は置き換え回数 (int32) です。

TrimStartAndEnd(): 空白文字の削除

前後にある空白文字を削除したいときに使います。

	FString Str = TEXT("  \"Hello, Unreal Engine!\"  ");
	FString Trimmed = Str.TrimStartAndEnd(); // 前後の空白を削除
	UE_LOG(LogTemp, Log, TEXT("%s"), *Trimmed); // "Hello, Unreal Engine!"

分割

ParseIntoArray(): 特定の文字で分割

いわゆるSplit関数です。"," (カンマ) 区切りの文字を分割したりできます。

	FString Str = TEXT("A,B,C");
	TArray<FString> Parts;
	Str.ParseIntoArray(Parts, TEXT(","), true); // "A,B,C" → ["A","B","C"]
	for(const FString& Part : Parts) {
		UE_LOG(LogTemp, Log, TEXT("%s"), *Part);
	}

大文字・小文字変換

ToUpper(): 小文字→大文字

	FString Str = TEXT("Hello");
	FString Upper = Str.ToUpper(); // "HELLO"
	UE_LOG(LogTemp, Log, TEXT("Uppercase: %s"), *Upper);

ToLower(): 大文字→小文字

	FString Str = TEXT("Hello");
	FString Lower = Str.ToLower(); // "hello"
	UE_LOG(LogTemp, Log, TEXT("Lowercase: %s"), *Lower);

数値変換

FromInt(): Int→FString

	FString NumStr = FString::FromInt(123);    // "123"
	UE_LOG(LogTemp, Log, TEXT("NumStr: %s"), *NumStr);

SanitizeFloat(): Float→FStirng

	FString FloatStr = FString::SanitizeFloat(3.14f); // "3.14"
	UE_LOG(LogTemp, Log, TEXT("FloatStr: %s"), *FloatStr);

Atoi(): FString→Int

	FString Str = TEXT("12345");
	int32 Num = FCString::Atoi(*Str);
	UE_LOG(LogTemp, Log, TEXT("Converted Number: %d"), Num); // 12345

Atof(): FString→Float

	FString Str = TEXT("123.456");
	float Val = FCString::Atof(*Str);
	UE_LOG(LogTemp, Log, TEXT("The float value is: %f"), Val); // 123.4560001

文字列比較

Equals(): 完全一致

	FString Str = TEXT("Hello");
	if(Str.Equals(TEXT("hello"))) {
		UE_LOG(LogTemp, Log, TEXT("Str is equal to 'Hello' (case-sensitive)"));
	}
	else {
		// 完全一致ではないのでここが実行される.
		UE_LOG(LogTemp, Log, TEXT("Str is NOT equal to 'Hello' (case-sensitive)"));
	}

	if (Str.Equals(TEXT("hello"), ESearchCase::IgnoreCase)) {
		// 大文字小文字を無視すると一致するのでここが実行される.
		UE_LOG(LogTemp, Log, TEXT("Str is equal to 'Hello' (case-insensitive)"));
	}
	else {
		UE_LOG(LogTemp, Log, TEXT("Str is NOT equal to 'Hello' (case-insensitive)"));
	}

Contains(): 部分一致

	FString Str = TEXT("Hello, world");
	if(Str.Contains(TEXT("world"))) {
		// "Hello, world" には "world" が含まれるので、ログが出力される
		UE_LOG(LogTemp, Log, TEXT("String contains 'world'"));
	}

おしまい

以上、FStringのよく使いそうな関数まとめでした。

文字列操作のときに役に立てれば幸いです!

\ 最新情報をチェック /