【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: 5IsEmpty(): 空文字判定
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
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: 7Find() の引数には以下の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 "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); // 12345Atof(): 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のよく使いそうな関数まとめでした。
文字列操作のときに役に立てれば幸いです!


