7 UE5 FString的使用、转换和常用方法介绍

2024-02-20  本文已影响0人  游戏开发程序员

FString: A dynamically sizeable string.
内部用的是TArray做的存储,所以在看TArray时会有一些共鸣。

class FString
{
public:
    using AllocatorType = TSizedDefaultAllocator<32>;

private:
    /** Array holding the character data */
    typedef TArray<TCHAR, AllocatorType> DataType;
    DataType Data;

先上代码:

常用的格式化输出学习:

    UE_LOG(TestLog, Warning, TEXT("int  %d"), 1234);
    UE_LOG(TestLog, Warning, TEXT("float  %f"), 12.34);
    FString str = TEXT("test FString");
    UE_LOG(TestLog, Warning, TEXT("string  %s"), *str);
    UE_LOG(TestLog, Warning, TEXT("[%s] len() is %d"), *str, str.Len());

常用的FName FText FString 转换:

    - FName 不区分大小写。不可变,无法被操作,通过键进行 FNames 的查找和访问速度较快。
    - FText 支持文本本地化,因此面向用户的所有文本
    - FString 可以搜索、修改并且与其他字符串比较。保存自己的字符数组.

    // 类型转换FName  FText FString
    FName name = FName(*str); // 资源ID
    FText text = FText::FromName(name); // 本地化的文本保存
    text = FText::FromString(str);

    FString _str = name.ToString(); // 参考std string
    _str = text.ToString(); 

基础类型转换(int bool float char wchar_t):

    FString TheString = TEXT("中文123.021");

    char* myChar = TCHAR_TO_UTF8(*TheString);
    myChar = TCHAR_TO_ANSI(*TheString);

    std::string stdStr = TCHAR_TO_UTF8(*TheString);
    stdStr = TCHAR_TO_ANSI(*TheString);

    std::wstring stdWStr = TCHAR_TO_WCHAR(*TheString);
    text = FText::FromString(TheString);

    TheString = "123.021";
    bool MyBool = TheString.ToBool();
    int32 MyInt = FCString::Atoi(*TheString);
    float MyFloat = FCString::Atof(*TheString);
    double MyDouble = FCString::Atod(*TheString);

    FString NewString = FString::FromInt(1234);
    NewString = FString::SanitizeFloat(12.34f);
    NewString = UTF8_TO_TCHAR("12.34");
    NewString = WCHAR_TO_TCHAR(L"12.34");

FString的常用函数

    // 填充
    NewString.Reset();
    NewString.AppendChar('A');
    for(int i = 0; i < 10; i++)
    {
        NewString.AppendInt(i);
    }

    // 对比
    FString strA = TEXT("1234");
    FString strB = TEXT("1234");
    if(strA == strB)
    {
        UE_LOG(TestLog, Warning, TEXT("strA == strB == %s"), *strA);
    }

    // 查找 返回索引
    int32 index = strA.Find(TEXT("123"));
    if(index >= 0 )
    {
        UE_LOG(TestLog, Warning, TEXT("strA.Find 123"));
    }

    // 查找 返回bool
    if(strA.Contains(TEXT("23")))
    {
        UE_LOG(TestLog, Warning, TEXT("strA.Contains 23"));
    }

字符串常用的替换、分割等函数

    // 替换
    FString strC = TEXT("12345");
    bool bStart = strC.StartsWith("123");
    strC = strC.Replace(TEXT("123"), TEXT("abc"));

    // 获取左、右
    _str = TEXT("This is a FString");
    FString Lstr = _str.Left(2);
    FString Rstr = _str.Right(2);
    // 分割到数组 不区分大小写
    if (!_str.IsEmpty())
    {
        TArray<FString> _ary;
        int32 count = _str.ParseIntoArray(_ary, TEXT("s"));
        // 分割为4个元素
        int32 size = _ary.Num();
    }
上一篇 下一篇

猜你喜欢

热点阅读