UE4随笔——字符串处理

UE4随笔——字符串处理,第1张


一、FName

特点:不区分大小写,不可变,查询&访问速度快,重复使用也只存储一次

使用:

创建:使用FString转为FName

FName TestHUDName = FName(TEXT("ThisIsMyTestFName"));

转换:FName只能转换成FString和FText,但是只支持从FString转FName

FName->FString:TestHUDString = TestHUDName.ToString();

FString->FName:TestHUDName = FName(*TestHUDString);//类似于创建过程

FName->FText:TestHUDText = FText::FromName(TestHUDName);

比较:两种方法

1.==

2.相当于TestFname-OtherFname,小于返回小于0,等于返回等于0,大于返回大于0

CompareFloat = TestFName.Compare(OtherFName); 

确定FName是否存在:使用FNAME_Find标记

if( FName(TEXT("pelvis"), FNAME_Find) != NAME_None )
{
    // Do something
}

2.FText

可本地化的文本,具有文本历史记录,使用FText::AsCultureInvariant可以生成一个没有本地化的数据(且不能本地化)的FText实例。


也可以使用“INVTEXT”宏实现。


可以使用FText::GetEmpty()或仅适用FText()创建空白FText

文本文字值:

本地化文本由三个部分组成:命名空间,标识(密钥),字符串;

使用C++创建:

方法一:

 FTextWorld=NSLOCTTEXT("命名空间","标识","字符串");

NSLOCTEXT("MyOtherNamespace","HelloWorld","Hello World!")

方法二:

 #define LOCTEXT_NAMESPACE "命名空间"

FTextWorld=LOCTTEXT("标识","字符串");

#undef LOCTEXT_NAMESPACE

两种方法的区别仅仅是命名空间的表达方式。


且第一种方法还可用于在INI文件中创建FText。


文本格式化:

提供将文本进行组合,以便进行格式化的方法,可以使用格式化的占位符来建立,如:

基于索引的格式化:"您还剩 {0} 点生命值。


"

基于名称的格式化:"您还剩 {CurrentHealth} 点生命值。


"

格式占位符还可以指定一个函数(称为"参数修饰符")在其参数数据上运行。


它们被指定为一个管道,后面跟着函数名和参数:"{NumCats} {NumCats}|plural(one=cat,other=cats)"

使用C++进行文本格式化:
FText::Format,可以接受基于索引或者基于名称的参数,如:

TextItem.Text = FText::Format(LOCTEXT("ExampleFText", "You currently have {0} health left."), CurrentHealth);

FText::FormatOrdered  or  FText::FormatNamed

蓝图中文本格式化:节点Format Text处理

文本转数值:这种转化与文化相关——例如,依照默认生成规则,浮点数"1234.5"将生成为英语格式的"1,234.5",法语格式的"1 234,5",和阿拉伯语格式的"١٬٢٣٤٫٥"。


以下是AsNumber的示例,第二个参数是对格式的设置。


 

static FText AsNumber
(
    float Val,
    const FNumberFormattingOptions *const Options,
    const FCulturePtr & TargetCulture
)

 这里给出更多的可选函数。


蓝图中的数值型生成:

 

C++时间型数据生成:

 以下是AsDate的定义

static FText AsDate
(
    const FDateTime & DateTime,
    const EDateTimeStyle::Type DateStyle,
    const FString & TimeZone,
    const FCulturePtr & TargetCulture

使用EDateTimeStyle来规定格式,其具体类型如下:

namespace EDateTimeStyle
{
    enum Type
    {
        Default,
        Short,
        Medium,
        Long,
        Full,
        Custom,
    }
}

蓝图中时间型数据生成:

对应于C++,蓝图也提供了一组节点用于数据的生成:

C++大小写变换:

Text::ToLower  or  Text::ToUpper

蓝图大小写变换:

Text to Lower  or  Text to Upper

比较:
EqualTo  or  CompareTo

在带画布的HUD系统上显示FText,要利用FCanvasTextItem空间,将Text变量设置为显示的文本:

// Create a new FCanvasTextItem instance to contain the text.
FCanvasTextItem TextItem(FVector2D::ZeroVector, TestHUDText, BigFont, FLinearColor::Black);
// Add the text into the FCanvasTextItem.
TextItem.Text = FText::Format(LOCTEXT("ExampleFText", "You currently have {0} health left."), CurrentHealth);
// Draw the text to the screen with FCanvas::DrawItem.
Canvas->DrawItem(TextItem, 10.0f, 10.0f);

FName和FText都是不可更改的,施工过保存共享字符数组的指针实现的,可以根据索引建立相等关系。



三、FString

可进行搜索,修改与比较,开销相比FName与FText较大。


创建:使用TEXT宏
 

FString TestHUDString = FString(TEXT("This is my test FString."));

 转换:

FString->FName:TestName=FName(*TestString);

FString->FText:TestText=FromString(TestString);//对比FName转FText,都是FromXX函数

由于FText转FName不被允许,可以先转为FString(Text.ToString()),然后FString转化为FName。


FName和FText转化为FString都是ToString函数。


数字转为FString:

 

从FString到数字/bool 

 比较:

1.==

2.FString::Equals:

TestHUDString.Equals(TEXT("Test"), ESearchCase::CaseSensitive);

参数ESearchCase 确定是否作为参数忽略大小写。


忽略大小写ESearchCase::IgnoreCase;否则使用 ESearchCase::CaseSensitive 。


 搜索:

1.FString::Contains()

 ESearchCase 参数同上,而ESearchDir参数指定搜索方向,默认从头开始

TestHUDString.Contains(TEXT("Test"), ESearchCase::CaseSensitive, ESearchDir::FromEnd);

2.FString::Find():返回找到的第一个子字符串索引 (最后一个参数或为相对设定搜索开始的偏移)

TestHUDString.Find(TEXT("test"), ESearchCase::CaseSensitive, ESearchDir::FromEnd, 10);

构建FString:使用子字符串&其他变量类型构建

1.串联只接受FString作为参数,其他类型应先转化为FString;

2.Printf可接受数字输入(浮点,int)。


串联使用的运算符:+=和+

 FString TimeDesc = FString::Printf(TEXT("%02d:%02d"), NumMinutes, NumSeconds);

在HUD中使用FString:

Canvas->DrawText(BigFont, TestHUDString, 110.0f,110.0f);

 必须在 HUD 类的 DrawHUD() 函数中调用 DrawText() 函数,或在以 DrawHUD() 开始的函数链中调用。


向屏幕打印提示信息:
UEngine::AddOnScreenDebugMessage()

GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, TestHUDString);

打印到控制台(输出日志):UE_LOG

UE_LOG(LogClass, Log, TEXT("This is a testing statement.%s"), *TestHUDString);

 

四、字符编码

肝不动了,: (  

字符编码 | 虚幻引擎文档 (unrealengine.com)

 

 

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/568898.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存