【UE C++】FString的基本用法

字符串的增删查改

  1. 构造和赋值操作
FString str1;//empty
FString str2("str");//L"str"
FString str3(3, "str1");//L"str"
FString str4 = TEXT("str");//L"str"
FString str5 = str2;//L"str"
  1. 追加,append和AppendChars ,字符串末尾增加另一个字符串
FString strName1 = TEXT("str");
strName1.Append(TEXT("Append1"));//L"strAppend1"
FString strName2 = TEXT("str");
strName2.Append(TEXT("Append1"),3);//L"strApp"
FString& FString::operator+=(const FString & Str),字符串末尾增加另一个字符串
FString strName1 = TEXT("str");
strName1 += TEXT("Append1"));//L"strAppend1"
  1. 插入操作void InsertAt(int32 Index, const FString& Characters),在指定位置插入字符串
FString strName = TEXT("StrStr");
strName.InsertAt(3, TEXT("Hello"));//L"StrHelloStr"
  1. 替换
//字符串替换
FString str = TEXT("Hello World");
FString str1 = str.Replace(TEXT("Hello"),TEXT("New"));//L"New World"
//字符替换
FString str2 = TEXT("Hello World");
str2.ReplaceCharInline(TEXT('l'),TEXT('a'));//L"Heaao Worad"
  1. 截断操作
	FString str = TEXT("Hello World ");
	FString str1 = str.Right(5);
	FString str2 = str.Left(5);
  1. 删除操作
bool RemoveFromStart()从开始删除某个字符串,若删除成功,返回true;
FString strName1 = TEXT("Hello World Hello");
strName1.RemoveFromStart(TEXT("Hello"));//L" World Hello"
bool RemoveFromEnd() 从结尾删除某个字符串,若删除成功,返回true;
FString strName2 = TEXT("Hello World Hello");
strName2.RemoveFromEnd(TEXT("Hello"));//L"Hello World "
void RemoveAt(int32 Index, int32 Count = 1)从指定位置删除自定长度的字节
FString strName3 = TEXT("Hello World Hello");
strName3.RemoveAt(6,5);//L"Hello  Hello"
  1. 清空字符串Empty
FString strName3 = TEXT("Hello World Hello");
strName3.Empty();
  1. 去掉空格,支持去除开始,末尾及开始和末尾空格

赋值给其它字符串

FString str = TEXT(" str1 str2 ");//
FString str1 = str.TrimStart();//L"str1 str2 "
FString str2 = str.TrimEnd();//L" str1 str2"
FString str3 = str.TrimStartAndEnd();//L"str1 str2"
字符串内部
FString str4 = TEXT(" str1 str2 ");
str4.TrimStartInline();//L"str1 str2 "
FString str5 = TEXT(" str1 str2 ");
str5.TrimStartInline();//L"str1 str2"
FString str6 = TEXT(" str1 str2 ");
str6.TrimStartAndEndInline();//L" str1 str2"
  1. 字符操作
FString str4 = TEXT("Hello World");
str4[0] = TEXT('W');//L"Wello World"
  1. 路径拼接
FString& operator/=( const FString& Str )实现两个字符串的路径连接
FString strCon1 = TEXT("C:/git");
strCon1 /= TEXT("NewFolder");//L"C:/git/NewFolder"
 friend FString operator/(const FString& Lhs, const TCHAR* Rhs)实现两个字符串的实现两个字符串的路径连接
FString strCon2 = FString(TEXT("C:/git")) / TEXT("NewFolder");//L"C:/git/NewFolder"
void PathAppend(const TCHAR* Str, int32 StrLength)路径末尾添加新的路径
FString strCon1 = TEXT("C:/git");
strCon1.PathAppend(TEXT("NewFolder"),3);//L"C:/git/New"
FString  str1 = FString::Printf(TEXT("test %d "),1);

- 查询字符串数据

查询字符串数据又多种方式,具体如下:

  1. bool FString::StartsWith(,)判断一个字符串是否以某个字符串开头。此函数具有两个参数,第一个参数指定了字符串(const TChar * 或const FString &),第二个参数指定是否大小写敏感(默认情况下是大小写不敏感)。例如:
FString str = TEXT("hello wolrd");
str.StartsWith(TEXT("hello"));//返回true
str.StartsWith(TEXT("hello1"));//返回false
  1. bool FString::EndsWith(,)类似于bool FString::StartsWith(,),此函数判断一个字符串是否以某个字符串结尾。
  2. bool FString::Contains()判断是否包含某个字符串,第一个参数为需查找的字符串,第二个参数为是否大小写敏感,第三个参数是否从头开始搜索。例如:
FString str = TEXT("hello wolrd");
str.Contains(TEXT("hello"));//返回true
str.Contains(TEXT("hello1"));//返回false
  1. 比较两个字符串

bool operator<=(const FString& Lhs, const FString& Rhs) 判断第一个字符串是否小于等于第二个字符串;

bool operator<(const FString& Lhs, const FString& Rhs) 判断第一个字符串是否小于第二个字符串;

bool operator>=(const FString& Lhs, const FString& Rhs) 判断第一个字符串是否大于等于第二个字符串;

bool operator>(const FString& Lhs, const FString& Rhs) 判断第一个字符串是否大于第二个字符串;

bool operator==(const FString& Lhs, const FString& Rhs) 判断两个字符串是否相等;

bool operator!=(const FString& Lhs, const CharType* Rhs) 判断两个字符串是否不相等。

  1. find
int32 FString::Find() 查找字符串,返回字符串开始位置;
bool FString::FindChar( TCHAR InChar, int32& Index ) 查找字符,并返回字符位置;
bool FString::FindLastChar( TCHAR InChar, int32& Index ) 查找追后一个字符,并返回位置信息
int32 FString::FindLastCharByPredicate(Predicate Pred)

-字符串转换

  1. 转换为FName或者FText
FName sNameFromStr = FName(*sStr);//FString到FName的转换
FText sText = FText::FromString(sStr);//FString到FText的转换
  1. 转换为数字类型
FString strFloat = FString::SanitizeFloat(123.4);
FString strInt = FString::FromInt(123);
  1. FName或者FText转换为字符串
FName sNameFromStr = FName(*sStr);//FString到FName的转换
FString sStrFromName = sName.ToString();//FName到FString的转换
FText sText = FText::FromString(sStr);//FString到FText的转换
FString sStrFromText = sText.ToString();//FText到FString的转换
  1. 数值类型转换为字符串
float f1 = FCString::Atof(TEXT("123.4"));
double d1 = FCString::Atod(TEXT("123.4"));
int i1 = FCString::Atoi(TEXT("123"));
int64 i64 = FCString::Atoi64(TEXT("123"));
bool b1 = FCString::ToBool(TEXT("true"));
  1. 大小写转换

赋值操作

FString str = TEXT("Hello");
FString str1 = str.ToLower();//L"hello"
FString str2 = str.ToUpper();//L"HELLO"

内部转换

FString str = TEXT("Hello");
str.ToLowerInline();
str.ToUpperInline();

- 字符串的增删查改

  1. 构造和赋值操作
FString str1;//empty
FString str2("str");//L"str"
FString str3(3, "str1");//L"str"
FString str4 = TEXT("str");//L"str"
FString str5 = str2;//L"str"
  1. 追加,append和AppendChars ,字符串末尾增加另一个字符串
FString strName1 = TEXT("str");
strName1.Append(TEXT("Append1"));//L"strAppend1"
FString strName2 = TEXT("str");
strName2.Append(TEXT("Append1"),3);//L"strApp"
FString& FString::operator+=(const FString & Str),字符串末尾增加另一个字符串
FString strName1 = TEXT("str");
strName1 += TEXT("Append1"));//L"strAppend1"
  1. 插入操作void InsertAt(int32 Index, const FString& Characters),在指定位置插入字符串
FString strName = TEXT("StrStr");
strName.InsertAt(3, TEXT("Hello"));//L"StrHelloStr"
  1. 替换

//字符串替换

FString str = TEXT("Hello World");
FString str1 = str.Replace(TEXT("Hello"),TEXT("New"));//L"New World"

//字符替换

FString str2 = TEXT("Hello World");
str2.ReplaceCharInline(TEXT('l'),TEXT('a'));//L"Heaao Worad"
  1. 截断操作
	FString str = TEXT("Hello World ");
	FString str1 = str.Right(5);
	FString str2 = str.Left(5);
  1. 删除操作
bool RemoveFromStart()从开始删除某个字符串,若删除成功,返回true;
FString strName1 = TEXT("Hello World Hello");
strName1.RemoveFromStart(TEXT("Hello"));//L" World Hello"
bool RemoveFromEnd() 从结尾删除某个字符串,若删除成功,返回true;
FString strName2 = TEXT("Hello World Hello");
strName2.RemoveFromEnd(TEXT("Hello"));//L"Hello World "
void RemoveAt(int32 Index, int32 Count = 1)从指定位置删除自定长度的字节
FString strName3 = TEXT("Hello World Hello");
strName3.RemoveAt(6,5);//L"Hello  Hello"
  1. 清空字符串Empty
FString strName3 = TEXT("Hello World Hello");
strName3.Empty();
  1. 去掉空格,支持去除开始,末尾及开始和末尾空格

赋值给其它字符串

FString str = TEXT(" str1 str2 ");//
FString str1 = str.TrimStart();//L"str1 str2 "
FString str2 = str.TrimEnd();//L" str1 str2"
FString str3 = str.TrimStartAndEnd();//L"str1 str2"

字符串内部

FString str4 = TEXT(" str1 str2 ");
str4.TrimStartInline();//L"str1 str2 "
FString str5 = TEXT(" str1 str2 ");
str5.TrimStartInline();//L"str1 str2"
FString str6 = TEXT(" str1 str2 ");
str6.TrimStartAndEndInline();//L" str1 str2"
  1. 字符操作
FString str4 = TEXT("Hello World");
str4[0] = TEXT('W');//L"Wello World"
  1. 路径拼接
FString& operator/=( const FString& Str )实现两个字符串的路径连接
FString strCon1 = TEXT("C:/git");
strCon1 /= TEXT("NewFolder");//L"C:/git/NewFolder"
 friend FString operator/(const FString& Lhs, const TCHAR* Rhs)实现两个字符串的实现两个字符串的路径连接
FString strCon2 = FString(TEXT("C:/git")) / TEXT("NewFolder");//L"C:/git/NewFolder"
void PathAppend(const TCHAR* Str, int32 StrLength)路径末尾添加新的路径
FString strCon1 = TEXT("C:/git");
strCon1.PathAppend(TEXT("NewFolder"),3);//L"C:/git/New"
FString  str1 = FString::Printf(TEXT("test %d "),1);

-查询字符串数据

查询字符串数据又多种方式,具体如下:

  1. bool FString::StartsWith(,)判断一个字符串是否以某个字符串开头。此函数具有两个参数,第一个参数指定了字符串(const TChar * 或const FString &),第二个参数指定是否大小写敏感(默认情况下是大小写不敏感)。例如:
FString str = TEXT("hello wolrd");
str.StartsWith(TEXT("hello"));//返回true
str.StartsWith(TEXT("hello1"));//返回false
  1. bool FString::EndsWith(,)类似于bool FString::StartsWith(,),此函数判断一个字符串是否以某个字符串结尾。
  2. bool FString::Contains()判断是否包含某个字符串,第一个参数为需查找的字符串,第二个参数为是否大小写敏感,第三个参数是否从头开始搜索。例如:
FString str = TEXT("hello wolrd");
str.Contains(TEXT("hello"));//返回true
str.Contains(TEXT("hello1"));//返回false
  1. 比较两个字符串

bool operator<=(const FString& Lhs, const FString& Rhs) 判断第一个字符串是否小于等于第二个字符串;

bool operator<(const FString& Lhs, const FString& Rhs) 判断第一个字符串是否小于第二个字符串;

bool operator>=(const FString& Lhs, const FString& Rhs) 判断第一个字符串是否大于等于第二个字符串;

bool operator>(const FString& Lhs, const FString& Rhs) 判断第一个字符串是否大于第二个字符串;

bool operator==(const FString& Lhs, const FString& Rhs) 判断两个字符串是否相等;

bool operator!=(const FString& Lhs, const CharType* Rhs) 判断两个字符串是否不相等。

  1. find
int32 FString::Find() 查找字符串,返回字符串开始位置;
bool FString::FindChar( TCHAR InChar, int32& Index ) 查找字符,并返回字符位置;
bool FString::FindLastChar( TCHAR InChar, int32& Index ) 查找追后一个字符,并返回位置信息
int32 FString::FindLastCharByPredicate(Predicate Pred)

3)字符串转换

  1. 转换为FName或者FText
FName sNameFromStr = FName(*sStr);//FString到FName的转换
FText sText = FText::FromString(sStr);//FString到FText的转换
  1. 转换为数字类型
FString strFloat = FString::SanitizeFloat(123.4);
FString strInt = FString::FromInt(123);
  1. FName或者FText转换为字符串
FName sNameFromStr = FName(*sStr);//FString到FName的转换
FString sStrFromName = sName.ToString();//FName到FString的转换
FText sText = FText::FromString(sStr);//FString到FText的转换
FString sStrFromText = sText.ToString();//FText到FString的转换
  1. 数值类型转换为字符串
float f1 = FCString::Atof(TEXT("123.4"));
double d1 = FCString::Atod(TEXT("123.4"));
int i1 = FCString::Atoi(TEXT("123"));
int64 i64 = FCString::Atoi64(TEXT("123"));
bool b1 = FCString::ToBool(TEXT("true"));
  1. 大小写转换

- 赋值操作

FString str = TEXT("Hello");
FString str1 = str.ToLower();//L"hello"
FString str2 = str.ToUpper();//L"HELLO"

- 内部转换

FString str = TEXT("Hello");
str.ToLowerInline();
str.ToUpperInline();
  1. 其他类型与字符串之间的转换

UE4部分类可以实现与字符串之间的相互转换

	FString FLinearColor::ToString() const
	{
		return FString::Printf(TEXT("(R=%f,G=%f,B=%f,A=%f)"),R,G,B,A);
	}
   	bool InitFromString( const FString& InSourceString )
	{
		R = G = B = 0.f;
		A = 1.f;

		// The initialization is only successful if the R, G, and B values can all be parsed from the string
		const bool bSuccessful = FParse::Value( *InSourceString, TEXT("R=") , R ) && FParse::Value( *InSourceString, TEXT("G="), G ) && FParse::Value( *InSourceString, TEXT("B="), B );
 
		// Alpha is optional, so don't factor in its presence (or lack thereof) in determining initialization success
		FParse::Value( *InSourceString, TEXT("A="), A );
 
		return bSuccessful;
	}  
  1. 解决中文乱码问题
FString Str = "你好";//会出现乱码
FString Str = TEXT("你好");//系统通过头文件Platform.h中TEXT宏判断是utf8编码还是unicode编码;