关于本博客的内容包含:
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...);
}
运行效果: