UEC++ FString的那些事

关于本博客的内容包含:
1.FString声明
2.数据类型转换
3.字符串比较
4.查询指定字符
5.查询指定字符位置
6.裁切字符串
7.拼接字符串
1.FString的构建声明方式

	FString str;
	FString str1 = FString(TEXT("HAHAH"));
	FString str2 = (TEXT("SDA"));

调用方法

GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, str1); //测试

效果:
在这里插入图片描述

2.FString数据类型转换

FVector loc(1, 2, 3);
loc.ToString(); //Vector转换方式

FRotator Rot(4, 5, 6);
Rot.ToString();//Rotation转换方式


FString::SanitizeFloat(变量名)//转换浮点类型

FString::FormatAsNumber(变量名)//格式化转换

FString::FromInt(变量名)//Int类型转换

数据类型转换的使用方法:

FVector loc(1, 2, 3);
loc.ToString();

GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, loc.ToString());

↑Vector类型
==========================================
FRotator Rot(4, 5, 6);
Rot.ToString();

GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Green, Rot.ToString());

↑Rotation类型
==========================================
float ValueC = 10.2f;

GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Black, FString::SanitizeFloat(ValueC));

↑浮点类型
==========================================

int32 ANumber = 22;
GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Blue, FString::FormatAsNumber(ANumber));


↑格式化转换的Int类型
==========================================

int32 INumber = 666;
GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, FString::FromInt(INumber));

↑Int类型
==========================================

转换后的打印效果
在这里插入图片描述

3.FString字串之间相互比较
字符串比较案例1:

 	FString SValueone = (TEXT("THISISONE")); //比较变量
	FString SValuetwo = (TEXT("THISISONE"));//比较变量
    //如果相等提示相等
	if (SValueone == SValuetwo)
	{
		GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, TEXT("相等"));
	}

案例1效果:
在这里插入图片描述
字符串比较案例2:通过函数比较

FString SValueone = (TEXT("THISISONE"));
FString SValuetwo = (TEXT("THISISONE"));

//.Equals(比较变量,枚举 判断是否比较大小写)
if (SValueone.Equals(SValuetwo,ESearchCase::CaseSensitive))
	{
		GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, TEXT("Fusn相等"));
	}

关于ESearchCase枚举内部
以下为内部源代码:

/** Determines case sensitivity options for string comparisons. */
namespace ESearchCase
{
	enum Type
	{
		/** Case sensitive. Upper/lower casing must match for strings to be considered equal. */
		CaseSensitive,

		/** Ignore case. Upper/lower casing does not matter when making a comparison. */
		IgnoreCase,
	};
};

2个参数不同的意义
IgnoreCase参数代表忽略大小写比较
CaseSensitive参数代表有大小写比较

效果:
1.开启大小写比较后 没比较成功所以没打印信息

在这里插入图片描述
在这里插入图片描述

效果:
2.关闭大小写比较后 提示对比成功

在这里插入图片描述

在这里插入图片描述

FString查找指定字符
案例1:

	FString SValueone = (TEXT("THISISONE")); 
	FString SValuetwo = (TEXT("NE")); //查找的字符

	if (SValueone.Contains(SValuetwo)) //Contains函数内输入需要查找的指定字符
	{
		GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, TEXT("查到了SValuetwo中的指定字符"));

	}

Containes函数内部原型

FORCEINLINE bool Contains(const TCHAR* SubStr, ESearchCase::Type SearchCase = ESearchCase::IgnoreCase, 
							  ESearchDir::Type SearchDir = ESearchDir::FromStart ) const
	{
		return Find(SubStr, SearchCase, SearchDir) != INDEX_NONE;
	}

可以观察到是个布尔(bool)类型的返回值

查找到的效果
在这里插入图片描述
在这里插入图片描述
未查找到情况效果:
在这里插入图片描述
在这里插入图片描述

查找指定字符位置
用Find函数
案例:

GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, FString::FromInt(SValueone.Find(SValuetwo)));

Find函数内部原型

FORCEINLINE int32 Find( const FString& SubStr, ESearchCase::Type SearchCase = ESearchCase::IgnoreCase, 
							ESearchDir::Type SearchDir = ESearchDir::FromStart, int32 StartPosition=INDEX_NONE ) const
	{
		return Find( *SubStr, SearchCase, SearchDir, StartPosition );
	}

可以观察到返回的是一个int32类型

效果:
在这里插入图片描述
在这里插入图片描述
如果没查询到返回-1

FString字符串裁切
裁切函数:
Split()
案例:

FString SValueone = (TEXT("HOW#ARE#YOU"));
	FString SLeft;
	FString SRight;
	SValueone.Split(TEXT("#"),&SLeft,&SRight);

调用方法:

	FString SLeft;
	FString SRight;
	SValueone.Split(TEXT("#"),&SLeft,&SRight); //裁切函数
    
	GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, SLeft);//左边的值
	GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, SRight);//右边的值

Split函数内部实现

bool Split(const FString& InS, FString* LeftS, FString* RightS, ESearchCase::Type SearchCase = ESearchCase::IgnoreCase,
		ESearchDir::Type SearchDir = ESearchDir::FromStart) const
	{
		int32 InPos = Find(InS, SearchCase, SearchDir);

		if (InPos < 0)	{ return false; }

		if (LeftS)		{ *LeftS = Left(InPos); }
		if (RightS)	{ *RightS = Mid(InPos + InS.Len()); }

		return true;
	}

可以观察到返回值是个布尔(bool)类型的变量 所以不能直接写在AddOnScreenDebugMessage打印上
效果:
在这里插入图片描述
在这里插入图片描述

FString判断字符串是否为空
IsEmpty();函数
案例:

FString SValuetwo;

if (SValuetwo.IsEmpty())
	{
		GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red,TEXT("为空"));

	}

IsEmpty函数内部实现

	FORCEINLINE bool IsEmpty() const
	{
		return Data.Num() <= 1;
	}

运行效果:
在这里插入图片描述

FString的字符串拼接
Printf()函数
用法

	FString SLeft;
	FString SRight;
	SValueone.Split(TEXT("#"),&SLeft,&SRight);
    
    //这里要取地址
	FString SFull = FString::Printf(TEXT("%s %s"), *SLeft, *SRight);

	GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, SFull);

Printf函数原型

template <typename FmtType, typename... Types>
	static typename TEnableIf<TIsArrayOrRefOfType<FmtType, TCHAR>::Value, FString>::Type Printf(const FmtType& Fmt, Types... Args)
	{
		static_assert(TIsArrayOrRefOfType<FmtType, TCHAR>::Value, "Formatting string must be a TCHAR array.");
		static_assert(TAnd<TIsValidVariadicFunctionArg<Types>...>::Value, "Invalid argument(s) passed to FString::Printf");

		return PrintfImpl(Fmt, Args...);
	}

运行效果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值