当前位置: 首页 > news >正文

说说UE5中的几种字符串类

在Unreal Engine 5 (UE5) 的C++中,与字符串相关的类主要包括:

  1. FString: Unreal Engine中用于处理字符串的主要类,提供了丰富的字符串操作方法和功能。

  2. FText: 用于表示本地化文本的类,可以包含多种语言的文本,并支持本地化和格式化。

  3. FName: 用于表示引擎内部名称的类,通常用于命名对象和资源。

  4. FTextFormat: 用于格式化和处理文本的类,支持文本的格式化操作。

        总的来说,FString用于一般的字符串操作和处理;FText用于多语言本地化;FName用于引擎内部的命名;FTextFormat用于格式化文本。每个类都有自己特定的使用场景和功能,开发人员可以根据需要选择合适的类来处理字符串。 

一、FString

        在UE5的C++中,FString是用于处理字符串的主要类,提供了丰富的字符串操作方法和功能。下面是FString的一些常用使用方法:

创建FString对象:

FString MyString = "Hello, World!";

字符串拼接:

FString ConcatenatedString = MyString + " This is a concatenated string.";

获取字符串长度:

int32 Length = MyString.Len();

查找子字符串:

int32 Index = MyString.Find("World");
if (Index != INDEX_NONE) {//INDEX_NONE 是一个常见的宏,通常用于表示一个无效的索引或者位置。//在UE4/UE5中,它的定义通常是-1。//在使用 TArray 或其他数据结构时,如果需要表示一个无效的索引,可以使用 INDEX_NONE 表示。//比如当你在一个数组中查找某个元素的索引,如果找不到,返回的索引就可以用 INDEX_NONE 表示。//在使用 FString::Find() 函数查找子串的时候,如果找不到,也会返回 INDEX_NONE。
}

替换子字符串:

MyString = MyString.Replace(*SearchString, *ReplaceString);

字符串分割:

TArray<FString> StringArray;
MyString.ParseIntoArray(StringArray, TEXT(" "), true);//在 Unreal Engine 中,TEXT 宏用于定义字符串字面量,并且标记这些字符串使用宽字符编码。
//通常情况下,字符串在 UE4/UE5 编程中都会使用 TEXT 宏来标识,
//这样可以确保字符串在不同平台上都能够正确处理,并且以正确的编码显示。

转换为宽字符字符串(WString):

TCHAR* WideCharString = MyString.GetCharArray();
//TCHAR 是 Unreal Engine 中的一个宏,用于跨平台开发时处理字符类型的问题。
//它的具体定义会根据项目的设置而有所不同。
//在 Windows 平台上,TCHAR 被定义为 TCHAR_WCHAR,也就是说它被用来表示宽字符。
//而在其他平台上,TCHAR 被定义为 char。//使用 TCHAR 宏可以帮助开发人员编写跨平台的代码,因为它可以根据具体的平台定义为不同的类型。
//这样一来,无论在 Windows 上编译还是在其他平台上编译,字符类型的处理都可以更加统一和简化。//另外,TCHAR还经常和一些宏一起使用,比如 TEXT() 宏,用于在不同平台上指定字符串字面量的格式。

格式化字符串:

FString FormattedString = FString::Printf(TEXT("The value is: %d"), 42);

        这些是FString类中一些常用的方法,开发人员可以根据实际需求灵活运用。FString提供了丰富的字符串操作功能,可以满足各种字符串处理需求。

二、FText

        在UE5的C++中,FText是用于处理本地化文本的类,可以包含多种语言的文本,并支持本地化和格式化。下面是FText的一些常用使用方法:

创建FText对象:

FText MyText = NSLOCTEXT("MyNamespace", "MyKey", "Hello, World!");//在上面的示例中,我们使用 NSLOCTEXT 宏定义了一个本地化字符串 "Hello, world!",
//并且为该字符串设置了类别 "MyNamespace" 和唯一标识符 "MyKey"。//使用 NSLOCTEXT 宏的好处在于,它可以帮助开发人员在游戏或应用程序中轻松使用本地化字符串,
//并且能够在不同语言和区域设置下正确展示相应的文本。
//这对于面向全球市场的应用程序特别重要,因为可以帮助开发人员为不同语言的玩家提供本地化的体验,
//从而增加应用程序的可访问性和用户体验。//因此,NSLOCTEXT 宏是UE中一种非常有用的工具,用于本地化游戏或应用程序中的字符串,
//并且能够帮助开发人员轻松集成多语言支持。

        其中NSLOCTEXT用于指定命名空间和键,用于定位对应的本地化文本。

获取本地化文本内容:

FString LocalizedString = MyText.ToString();

格式化文本:

FText FormattedText = FText::Format(MyText, Argument1, Argument2);

        其中Argument1, Argument2为需要插入的参数。

比较本地化文本:

if (MyText.EqualTo(OtherText)) {// 文本相同
}

获取指定语言的本地化内容:

FText MyLocalizedText = FText::FromStringTable("TableName", "KeyName", "LanguageCode");

        其中LanguageCode为指定的语言代码。

获取本地化文本的参数:

FString ParameterValue = MyText.ToStringParameter(ParameterID);

        以上是FText类的一些常用使用方法。FText主要用于处理本地化文本,支持多语言、格式化和参数化等功能,能满足游戏中需要国际化和多语言支持的文本处理需求。

三、FName

        在UE5的C++中,FName是用于表示字符串标识符的类,通常用于在代码中唯一标识对象、变量、函数等。下面是FName的一些常用使用方法:

创建FName对象:

FName MyName = FName("UniqueName");

或者使用静态方法进行创建:

FName MyName = "UniqueName"_F;//使用 "_F" 后缀的字符串字面量是一种常见的命名约定,用于标识需要进行本地化处理的文本,
//并且有助于开发人员对需要本地化的字符串进行统一管理和处理。
//这个例子中,“UniqueName” 字符串将被标记为需要进行本地化处理,以便在不同语言环境中进行翻译和显示。 //UE在处理这些带有 "_F" 后缀的字符串时,会将其作为本地化的文本资源来对待。

获取FName的字符串表示:

FString NameString = MyName.ToString();

对比FName:

if (MyName.IsEqual("OtherName")) {// 名称相同
}

检查FName是否为None(空):

if (MyName.IsNone()) {// 名称为空
}

获取FName的索引:

int32 NameIndex = MyName.GetIndex();

检查FName是否为数字索引:

if (MyName.IsNumeric()) {// 名称为数字索引
}

获取None(空)名称:

FName NoneName = FName::None;

        这些是FName类的一些常用使用方法。FName主要用于在代码中唯一标识对象、变量等,可以在运行时进行名称比较和索引查找,是UE5中常用的字符串标识符类。

 四、FTextFormat

        在UE5的C++中,FTextFormat是一个用于格式化文本的类,它可以用于构建包含可变部分的文本,以便根据需要插入变量值。下面是FTextFormat的一些常用用法:

创建FTextFormat对象:

FTextFormat TextFormat = FTextFormat::FromString("Hello, {0}! You have {1} new messages.");

        在这里,文本格式中包含了两个可变部分,使用{0}和{1}作为占位符。

格式化文本:

FText FormattedText = FTextFormat::Format(TextFormat, Argument1, Argument2);

        在这里,你可以使用Format方法传入TextFormat对象和对应的参数(Argument1, Argument2)来替换文本中的占位符。

        举个例子:

FText MyFormattedText = FText::Format(
LOCTEXT("MyFormattedString", "Welcome, {0}, to {1}!"), 
FText::FromString("PlayerName"), 
FText::FromString("GameName"));

        在这个例子中,我们使用 FText::Format 函数来格式化一个字符串。"Welcome, {0}, to {1}!" 是原始的未格式化的 FText 字符串,其中包含了两个占位符 {0} 和 {1}。在函数的第二个参数中,我们指定了要替换占位符的值,分别是 "PlayerName" 和 "GameName"。FText::FromString() 函数用于将字符串转换为 FText。在格式化后,MyFormattedText 中的内容将是本地化后的结果,例如 "Welcome, PlayerName, to GameName!",并且可以根据游戏运行的语言环境进行动态翻译。 

获取格式化后的文本内容:

FString FormattedString = FormattedText.ToString();

        这样你就可以将格式化后的文本内容转换成字符串,供后续使用。

使用FTextFormat的占位符:

FTextFormat TextFormat = FTextFormat::FromString("You have {0} new message{s}.");

        在这个例子中,使用了占位符{s},在格式化时根据参数是否为复数决定是否添加"s"。

        通过上述方法,你可以使用FTextFormat来构建格式化的文本,插入变量值并根据需要处理复数形式等。这为你提供了更灵活的方式来处理需要动态内容的文本。

相关文章:

  • 力扣爆刷第80天--动态规划一网打尽子序列一维二维连续不连续变体
  • Excel工作表控件实现滚动按钮效果
  • 20.scala视图界定
  • 题目 1124: C语言训练-大、小写问题
  • matlab一维二维和三维RBF插值方法
  • 第7.1章:StarRocks性能调优——查询分析
  • 多输入时序预测|WOA-CNN|鲸鱼算法优化的卷积神经网络时序预测(Matlab)
  • 计算机网络面经-从浏览器地址栏输入 url 到显示主页的过程?
  • LeetCode 2433.找出前缀异或的原始数组
  • 5 buuctf解题
  • 淘宝京东1688实时API商品详情数据解析:获取市场最新趋势
  • 基于Java SSM框架实现高考填报信息系统项目【项目源码】
  • 第6.3章:StarRocks查询加速——Bucket Shuffle Join
  • fastJSON 字符串转对象
  • CCAA审核员职业健康安全管理体系基础考试大纲
  • 【译】JS基础算法脚本:字符串结尾
  • 4. 路由到控制器 - Laravel从零开始教程
  • android图片蒙层
  • canvas 高仿 Apple Watch 表盘
  • Iterator 和 for...of 循环
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Java程序员幽默爆笑锦集
  • java取消线程实例
  • JSONP原理
  • PHP面试之三:MySQL数据库
  • React as a UI Runtime(五、列表)
  • spring boot 整合mybatis 无法输出sql的问题
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Web设计流程优化:网页效果图设计新思路
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 前端性能优化--懒加载和预加载
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • gunicorn工作原理
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​linux启动进程的方式
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #if和#ifdef区别
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (八)Flask之app.route装饰器函数的参数
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (转)原始图像数据和PDF中的图像数据
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET使用存储过程实现对数据库的增删改查
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @Mapper作用
  • @Query中countQuery的介绍