天天看點

uc腳本--字元串

在UC引擎中Object 和 Actor 類中包含很多用于執行使用虛幻腳本中的字元串或者與其相關的操作的操作符和函數。該文檔較長的描述了這些操作符和函數。

$(美元符号操作符)

string $ ( coerce string A, coerce string B )
      

$

操作符需要兩個字元串, A 和 B ,然後連接配接它們。如果 A 或者 B 不是字元串,那麼将會嘗試将它們的值轉換為字元串值。

示例:

`log("Unreal"$"Script"); //prints "UnrealScript"
      

$=

string $= ( out string A, coerce string B )
      

$=

操作符需要兩個字元串, A 和 B ,連接配接它們,然後将最終的字元串配置設定給第一個字元串。如果 B 不是字元串,那麼會嘗試将它的值轉換為一個字元串值。

示例:

MyString = "Unreal";
MyString $= "Script"; // MyString 包含 "UnrealScript"
      

@(at 符号操作符)

string @ ( coerce string A, coerce string B )
      

@

操作符需要兩個字元串, A 和 B ,然後連接配接它們,在它們兩個之間放置一個空格。如果 A 或者 B 不是字元串,那麼将會嘗試将它們的值轉換為字元串值。

示例:

log("Unreal"@"Engine"); //prints "Unreal Engine"
      

@=

string @= ( out string A, coerce string B )
      

@=

操作符需要兩個字元串, A 和 B ,連接配接它們,在它們之間放置一個空格,然後将最終的字元串配置設定給第一個字元串。如果 B 不是字元串,那麼會嘗試将它的值轉換為一個字元串值。

示例:

MyString = "Unreal";
MyString @= "Engine"; // MyString contains "Unreal Engine"
      

<(小于号操作符)

bool < ( string A, string B )
      

< 操作符需要兩個字元串, A 和 B ,然後如果第一個字元串按照字母順序在第二個字元串前面,那麼傳回 true。 注意:大寫字母将總是在小寫字母的前面;如果不區分大小寫時,請考慮使用 Caps。

示例:

("Monkey" < "Robot") //結果是 TRUE。
      

>(大于号操作符)

bool > ( string A, string B )
      

> 操作符需要兩個字元串, A 和 B ,然後如果第一個字元串按照字母順序在第二個字元串後面,那麼傳回 true。 注意:大寫字母将總是在小寫字母的前面;如果不區分大小寫時,請考慮使用 Caps。

示例:

("Batman" > "Aquaman") //結果是 TRUE。
      

<=(小于或等于号操作符)

bool <= ( string A, string B )
      

<= 操作符需要兩個字元串, A 和 B ,然後如果第一個字元串按照字母順序在第二個字元串前面或者順序一樣,那麼傳回 true。 注意:大寫字母将總是在小寫字母的前面;如果不區分大小寫時,請考慮使用 Caps。

示例:

("Monkey" <= "Robot")  //結果是 TRUE。
("Monkey" <= "Monkey") //結果是 TRUE。
      

>=(大于或等于号操作符)

bool >= ( string A, string B )
      

>= 操作符需要兩個字元串, A 和 B ,然後如果第一個字元串按照字母順序在第二個字元串後面或者順序一樣,那麼傳回 true。 注意:大寫字母将總是在小寫字母的前面;如果不區分大小寫時,請考慮使用 Caps。

示例:

("Monkey" >= "Robot")  //結果是 FALSE。
("Monkey" >= "Monkey") //結果是 TRUE。
      

==(等号操作符)

bool == ( string A, string B )
      

== 操作符需要兩個字元串, A 和 B ,如果這兩個字元串相同,那麼傳回 true。 注意,這是一個區分大小寫的比較。

示例:

("Monkey" == "Robot")  //結果是 FALSE。
("Monkey" == "Monkey") //結果是 TRUE。
("Monkey" == "monkey") //結果是 FALSE。
      

!=(不等号操作符)

bool != ( string A, string B )
      

!= 操作符需要兩個字元串, A 和 B ,如果這兩個字元串不同,那麼會傳回 true。 注意,這是一個區分大小寫的比較。

示例:

("Monkey" != "Robot")  //結果是 TRUE。
("Monkey" != "Monkey") //結果是 FALSE。
("Monkey" != "monkey") //結果是 TRUE。
      

~=(約等号操作符)

bool ~= ( string A, string B )
      

== 操作符需要兩個字元串, A 和 B ,如果這兩個字元串相同(不考慮大小寫),那麼傳回 true。

示例:

("Monkey" ~= "Robot")  //結果是 FALSE。
("Monkey" ~= "Monkey") //結果是 TRUE。
("Monkey" ~= "monkey") //結果是 TRUE。
      

-=(減法指派操作符)

string -= ( out string A, coerce string B );
      

-= 操作符會從 A 中删除 B ,然後将結果配置設定給 A 。這是一個區分大小寫的操作。如果 B 不是字元串,那麼會嘗試将它的值轉換為一個字元串值。

示例:

MyString = "test: this is a test";
MyString -= "test";
log(MyString); // 輸出: ": this is a ";
      

Object 函數

Len

int Len ( coerce string S )
      

傳回字元串的長度。

示例:

Len("this"); //傳回 4;
      

InStr

int InStr ( coerce string S, coerce string t )
      

InStr() 函數會傳回在字元串 S 中第一次出現子字元串 t 的位置。 如果沒有發現子字元串,那麼 InStr 會傳回 1。注意,搜尋是區分大小寫的,是以如果您不關心大小寫,那麼可以考慮在使用 InStr 之前調用 Caps。如果 S 或者 t 不是字元串,那麼将會嘗試将它們的值轉換為字元串值。

示例:

InStr("These PANTS rock!", "PANTS"); //傳回 6
InStr("These PANTS rock!", "pants"); //傳回 -1
InStr( Caps("These PANTS rock!"), Caps("pants") ); //傳回 6
      

Mid

string Mid ( coerce string S, int i, optional int j )
      

Mid() 函數從字元串

S

的字元

i

開始複制 j 個字元來生成一個

S

的子字元串。 如果省略了 j ,那麼将會複制所有的剩餘字元串。 i 的值在 0 到字元串長度的區間限定之間。 j 的值在 i 到字元串長度的區間限定内。如果 S 不是字元串,那麼會嘗試将它的值轉換為一個字元串值。

示例:

Mid("These PANTS rock!", 6, 5); //傳回 "PANTS"
Mid("These PANTS rock!", 6); //傳回 "PANTS rock!"
      

Left

string Left ( coerce string S, int i )
      

Left() 函數會傳回給定字元串 S 中 i 最左邊的字元。 它會将這個字元串傳回到索引 i 的左邊,但是不包括該字元。如果 S 不是字元串,那麼會嘗試将它的值轉換為一個字元串值。

示例:

Left("These PANTS rock!", 5); //傳回 "These"
      

Right

string Right ( coerce string S, int i )
      

Right() 函數會傳回給定字元串 S 中 i 最右邊的字元。如果 S 不是字元串,那麼會嘗試将它的值轉換為一個字元串值。

示例:

Right("These PANTS rock!", 5); //傳回 "rock!"
      

Caps

string Caps ( coerce string S )
      

Caps() 函數會傳回給定字元串 S 的大寫字母版本。如果 S 不是字元串,那麼會嘗試将它的值轉換為一個字元串值。

示例:

Caps("wooo"); //傳回 "WOOO"
      

Locs

string Locs ( coerce string S )
      

Locs() 函數會傳回給定字元串 S 的小寫字母版本。如果 S 不是字元串,那麼會嘗試将它的值轉換為一個字元串值。

示例:

Locs("WoOo"); //傳回 "wooo"
      

Chr

string Chr ( int i )
      

Chr() 函數會傳回給定 int 的字元串表示形式。 它可以是 Unicode 範圍 0 - 65535 内的任何值。

示例:

Chr(65); //傳回 "A"
      

Asc

int Asc ( string S )
      

Asc() 函數會傳回給定字元串 S 的第一個字母的數字形式的 Unicode 表示形式。

示例:

Asc("A"); //傳回 65
      

Repl

string Repl ( coerce string Src, coerce string Match, coerce string With, optional bool bCaseSensitive )
      

Repl() 函數會使用 Src 中的 With 替換所有出現 Match 的地方。如果 Src 、 Match 或者 With 不是字元串,那麼将會嘗試将它們的值轉換為字元串值。

示例;

Repl("This is a test", "is", "was"); // 會産生 "Thwas was a test";
Repl("Two be or not two be", "two", "to", true); // 傳回 "Two be or not to be"
Repl("Two be or not two be", "two", "to", false); // 傳回 "to be or not to be"
      

Split(分隔)

static final function string Split(coerce string Text, coerce string SplitStr, optional bool bOmitSplitStr)
      

Split() 函數會在第一次出現 SplitStr 的地方分割 Text ,然後傳回 Text 的剩餘部分。如果 bOmitSplitStr 為 TRUE,那麼會從傳回的 Text 的剩餘部分中省略 SplitStr 。否則,包括它在内。 如果 Text 或者 SplitStr 不是字元串,那麼會嘗試将它們的值轉換為字元串值。

示例:

Split("Unreal Engine uses UnrealScript as its scripting language", "scripting", false); // 傳回 "scripting language"
Split("Unreal Engine uses UnrealScript as its scripting language", "scripting", true); // 傳回 " language"
      

GetRightMost

string GetRightMost( coerce string Text )
      

GetRightMost() 函數使得 Text 在最右邊的 '_' 字元後面,例如,actor 名稱中的數字。如果 Text 不是字元串,那麼會嘗試将它的值轉換為一個字元串值。

示例:

GetRightMost("CoverLink_45"); // 傳回 "45"
      

JoinArray

JoinArray(array<string> StringArray, out string out_Result, optional string delim = ",", optional bool bIgnoreBlanks = true)
      

JoinArray() 函數會使用指定的 delim 分界符從字元串的 StringArray 數組中建立一個單獨的字元串,然後将結果字元串配置設定給 out_Result 。如果 bIgnoreBlanks 為 TRUE,那麼将會忽略空白的 StringArray 中的元素。

示例:

Maps[0] = "Deck";
Maps[1] = "Necropolis";
Maps[2] = "Sandstorm";
Maps[2] = "Sanctuary";
JoinArray(Maps, MapString); // MapString contains "Deck,Necropolis,Sandstorm,Sanctuary"
      

ParseStringIntoArray

ParseStringIntoArray(string BaseString, out array<string> Pieces, string Delim, bool bCullEmpty)
      

ParseStringIntoArray() 函數會使用指定的 Delim 分界符将一個字元串劃分為字元串數組的元素,然後将結果數組配置設定給 Pieces 。如果 bCullEmpty 為 TRUE,當分界符出現在中間過程時,通常不會将使用這個執行個體建立的空白元素添加到數組中。

示例:

ParseStringIntoArray("Deck,Necropolis,,Sandstorm,Sanctuary", Maps, ",", false); // 地圖包含 {Deck, Necropolis, , Sanstorm, Sanctuary}
ParseStringIntoArray("Deck,Necropolis,,Sandstorm,Sanctuary", Maps, ",", true); // 地圖包含 {Deck, Necropolis, Sanstorm, Sanctuary}
      

SplitString

array<string> SplitString( string Source, optional string Delimiter=",", optional bool bCullEmpty )
      

SplitString() 函數是一個使用 ParseStringIntoArray() 函數将字元串分割為字元串的數組的封裝類。唯一的真正差別是這個數組是 SplitString() 函數的傳回值,而不是 out 參數。

示例:

SplitString("Deck,Necropolis,,Sandstorm,Sanctuary", ",", false); // 傳回 {Deck, Necropolis, , Sanstorm, Sanctuary} 的數組
ParseStringIntoArray("Deck,Necropolis,,Sandstorm, Maps, ",", false);// 地圖包含 {Deck, Necropolis, , Sanstorm, Sanctuary}
      

Actor 函數

ReplaceText

function ReplaceText(out string Text, string Replace, string With)
      

ReplaceText() 函數與 Repl() 函數相似,隻是會将結果配置設定給輸入字元串 Str 。

示例:

Str = "This is a test";
ReplaceText(Str, "is", "was"); // Str 包含了 "Thwas was a test";

Str = "Two be or not two be";
ReplaceText(Str, "two", "to"); // Str 包含了 "Two be or not to be"
      

GetItemName

String GetItemName( string FullName )
      

GetItemName() 函數會接受一個 "Package.Item" 字元串并傳回它的 "Item" 部分。

示例:

GetItemName(string(self)); // 傳回這個類名稱
GetItemName("Package.Group.bla.Item"); // 傳回 "Item"
      

特殊注意事項

字元串連接配接和指派

您經常看到類似于以下的腳本代碼:

for ( i = 0; i < Count; i++ )
{
      if ( MyString != "" )
      {
            MyString = MyString + ", ";
      }
      MyString = MyString + NextArrayValue[i];
}
      

目前有兩個字元串操作符來執行字元串連接配接和配置設定:

native(322) static final operator(44) string $= ( out  string A, coerce string B );
native(323) static final operator(44) string @= ( out  string A, coerce string B);
      

可以重寫上面的代碼,如下所示:

for ( i = 0; i < Count; i++ )
{
      if ( MyString != "" )
      {
            MyString $= ", ";
      }
      MyString $= NextArrayValue[i];
}
      

原因是 $= 操作符更快!

這裡是針對每個版本的真正的處理過程:

MyString = MyString + NextArrayValue[i];
      
  1. 計算左側;查找

    MyString

    變量的位址。
  2. 計算右側;激活 + 操作符 (

    execString_Concat

    )
  3. 查找

    MyString

    變量的位址;通過 + 操作符把它的值複制到臨時緩存中以便使用。
  4. 查找

    NextArrayValue

    (

    execArrayElement

    ) 的位址;通過 + 操作符把它的值複制到臨時緩存中以便使用。
  5. 将兩個臨時緩存加到一起;并将該字元串複制到

    MyString

    中。
MyString $= NextArrayValue[i];
      
  1. 查找

    MyString

    變量的位址。
  2. 查找

    NextArrayValue[i]

    變量的位址。直接将該值附加到

    MyString

    上。