当前位置: 首页 > 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来构建格式化的文本,插入变量值并根据需要处理复数形式等。这为你提供了更灵活的方式来处理需要动态内容的文本。

相关文章:

说说UE5中的几种字符串类

在Unreal Engine 5 (UE5) 的C中&#xff0c;与字符串相关的类主要包括&#xff1a; FString&#xff1a; Unreal Engine中用于处理字符串的主要类&#xff0c;提供了丰富的字符串操作方法和功能。 FText&#xff1a; 用于表示本地化文本的类&#xff0c;可以包含多种语言的文本…...

(done) 如何判断一个矩阵是否可逆?

参考视频&#xff1a;https://www.bilibili.com/video/BV15H4y1y737/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 这个视频里还暗含了一些引理 1.若 AX XB 且 X 和 A,B 同阶可逆&#xff0c;那么 A 和 B 相似。原因&#xff1…...

洗眼镜用的超声波清洗机哪一家更好一点?好用超声波清洗机排名

在我们日常生活中&#xff0c;眼镜、首饰、手表等细小物件的清洁一直是一个让人头疼的问题。传统的清洁方法不仅耗时耗力&#xff0c;还可能因为不当的操作而损伤到这些精细的物品。那么&#xff0c;有没有一种既快捷又安全的清洁方式呢&#xff1f;答案就是使用超声波清洗机。…...

(二十二)Flask之上下文管理第三篇【收尾—讲一讲g】

目录: 每篇前言:g到底是什么?生命周期在请求周期内保持数据需要注意的是:拓展—面向对象的私有字段深入讲解一下那句:每篇前言: 🏆🏆作者介绍:【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、CSDN原力计划作者🔥🔥本文已…...

五种多目标优化算法(MOGWO、MOJS、NSWOA、MOPSO、MOAHA)性能对比,包含6种评价指标,9个测试函数(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MOGWO 1.2MOJS 1.3NSWOA 1.4MOPSO 1.5MOAHA 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数&#xff08;zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3&#xff09;&#xff0…...

istio实战:springboot项目在istio中服务调用

目录 一、前言二、准备工作三、问题排查四、总结参考资料 一、前言 在经过前面几天k8s和Istio的安装之后&#xff0c;开始进入最核心的阶段。微服务在抛弃传统的服务注册和服务发现之后&#xff0c;是怎么在istio怎么做服务间的调用的呢&#xff1f;本次实战花费了我2-3天的时…...

随机分布模型

目录 前言 一、离散型随机变量 1.1 0-1分布 1.2 二项分布 1.3 帕斯卡分布 1.4 几何分布 1.5 超几何分布 1.6 泊松分布 二、连续型随机变量 2.1 均匀分布 2.2 指数分布 2.3 高斯分布/正态分布 2.4 分布&#xff08;抽样分布&#xff09; 2.5 t分布&#xff08;抽样…...

Visual Studio:Entity设置表之间的关联关系

1、选择表并右键-》新增-》关联 2、设置关联的表及关联关系并“确定”即可...

每日五道java面试题之spring篇(二)

目录&#xff1a; 第一题 Spring事务传播机制第二题 Spring事务什么时候会失效?第三题 什么是bean的⾃动装配&#xff0c;有哪些⽅式&#xff1f;第四题 Spring中的Bean创建的⽣命周期有哪些步骤&#xff1f;第五题 Spring中Bean是线程安全的吗&#xff1f; 第一题 Spring事务…...

287.【华为OD机试真题】字符串序列判定(贪心算法—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-字符串序列判定二.解题思路三.题解代码Python题…...

Sentinel微服务流量治理组件实战上

目录 分布式系统遇到的问题 解决方案 Sentinel 是什么&#xff1f; Sentinel 工作原理 Sentinel 功能和设计理念 流量控制 熔断降级 Sentinel工作主流程 Sentinel快速开始 Sentinel资源保护的方式 基于API实现 SentinelResource注解实现 Spring Cloud Alibaba整合…...

Three.js加载PLY文件

这是官方的例子 three.js webgl - PLY 我在Vue3中使用&#xff0c;测试了好久始终不显示点云数据。在网上查询后发现ply文件要放置在public目录下才行 <el-row><el-button type"primary" class"el-btn" click"IniThree1">PLY</…...

chrome闪退后打不开问题 打开立即闪退

今天刚遇到&#xff0c;大概率是某些网站引起的闪退&#xff0c;重启和清理也不能解决问题 网上到处都是答非所问&#xff0c;还有什么打开chrome再进行设置这种回答 在此解决下 注意该方法根据我测试&#xff0c;唯一会损失的是chrome扩展&#xff0c;可以提前去 C:\Users…...

Slave被误写入数据如何恢复到主库

背景 在GreatSQL主从复制环境中&#xff0c;有时候可能会出现一些误操作&#xff0c;将本应该写入到主库的数据写入到了从库&#xff0c;导致主从数据不一致&#xff0c;影响数据同步。是否可以将写入从库的数据同步写入主库呢&#xff1f; 测试环境 角色IP地址数据库开放端…...

kafka生产者

1.原理 2.普通异步发送 引入pom&#xff1a; <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.0.0</version></dependency><dependency><g…...

前后端分离Vue+node.js在线学习考试系统gqw7o

与其它应用程序相比&#xff0c;在线学习平台的设计主要面向于学校&#xff0c;旨在为管理员和学生、教师、院系提供一个在线学习平台。学生、教师、院系可以通过系统及时查看公告信息等。 在线学习平台是在Windows操作系统下的应用平台。为防止出现兼容性及稳定性问题&#xf…...

关于el-select值的回显问题 : 框内显示label值还是value值

<el-form-item label"状态" prop""><el-selectv-model"roleForm.state"class"m-2"size"large"style"width: 240px"placeholder"请选择状态"value-key"value"//value-key 与下面的ke…...

MCU多核异构通信原理

摘要&#xff1a; 本文结合瑞萨RZ/G2L 多核处理器&#xff0c;给大家讲述一下多核异构设计及通信的原理。 随着电子技术的不断发展&#xff0c;以及市场需求的日益增长&#xff0c;嵌入式系统不仅要求执行复杂的控制任务&#xff0c;还需要实时地采集和处理数据。 为了满足这…...

在autodl搭建stable-diffusion-webui+sadTalker

本文介绍在autodl.com搭建gpu服务器&#xff0c;实现stable-diffusion-webuisadTalker功能&#xff0c;图片音频 可生成视频。 autodl租GPU 自己本地部署SD环境会遇到各种问题&#xff0c;网络问题&#xff08;比如huggingface是无法访问&#xff09;&#xff0c;所以最好的方…...

【办公类-16-10-01】“2023下学期 中4班 自主游戏观察记录(python 排班表系列)

背景需求 上学期的周安排里&#xff0c;每班每周的自主游戏会轮到多个不同的内容 因此在每周的自主游戏观察有2次记录&#xff0c;观察的项目可以写不一样的&#xff0c; 如一位老师写沙水游戏&#xff0c;另一位写表演游戏 本学期&#xff0c;中班的自主游戏全部是户外的&am…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...