string

説明

文字列を表すクラスです。

文字列を検査、検索/置換、および操作するためのメソッドが含まれています。

エンコーディングと文字列インデックス

FlexSim内の文字列はUTF-8形式にエンコードされます。つまり、単純なASCII文字列の場合、各文字は1バイト(8ビット)を占有します。ただし、非ASCII文字列は最大4バイトで構成される場合があります。たとえば、ギリシャ文字のΣをUTF-8でエンコードするには2バイトが必要です。

文字列内の任意の文字が複数バイトで構成される可能性があるため、文字インデックスで文字列内の文字にアクセスするのは容易ではありません。そのため、FlexSimの文字列インターフェイスでは、文字列内の文字にアクセスする際、バイトベースのインデックス付けを使用します。つまり、インデックスを取得するまたはインデックスを文字列に返す文字列メソッド(charAt()、substr()、slice()、indexOf()、lastIndexOf()、search()、slice()、length、array[]演算子)はすべて文字インデックスではなくバイトインデックスを取得して返します。また、FlexSimでは、すべてのインデックス付けが1ベースです。つまり、文字列内の先頭バイトにアクセスするには、インデックス1を使用します(他の多くのプログラミング言語のようにインデックス0ではない)。

たとえば、文字列"Σ=σ"について考えてみましょう。=文字は、厳密に言えば2番目の文字であるため、「文字インデックス」は2ですが、Σ文字が2バイトを占有するため、「バイトインデックス」でアクセスする場合は3になります。

string("Σ=σ").charAt(3) // returns "="

なお、このルールを前提とすれば、1文字が複数バイトを占有する場合、別々のバイトインデックスを使用する複数のコマンド呼び出しが同じ結果を返す可能性もあります。

string("Σ=σ").charAt(1) // returns "Σ"
string("Σ=σ").charAt(2) // returns same "Σ"

一般にこの件は、文字列の操作方法には影響しません。replace()メソッドやmatch()メソッドのように、多くのメソッドでは、インデックスによる文字列アクセスを必要としないためです。文字列内の文字に手動でアクセスする必要がある場合は、コード内であらゆる種類の文字に対応できるメソッドがいくつかあります。

エンコーディングを気にせずに個別の文字を操作する最も簡単な方法は、split()メソッドとjoin()メソッドを使用することです。split()メソッドは、文字列を個別の文字の配列に分割します。分割後の配列は、バイトインデックスではなく文字インデックスで走査できます。処理が終了した後、配列を結合して文字列に戻すことができます。

string str = "Σ=σ";
Array asArray = str.split();
for (int i = 1; i <= asArray.length; i++) {
  if (asArray[i] == "=")
    asArray[i] = "≠";
}
str = asArray.join(); // "Σ≠σ"

バイトではなく文字を使用して文字列を検索したいものの、文字列を配列に分割したくない場合、文字列全体をループするという方法があります。その際には、charAt()メソッドを使用して、各文字のバイト長に基づいてループインデックスをインクリメントします。

string str = "Σ=σ";
string curChar = "";
for (int i = 1; i <= str.length; i += curChar.length) {
  curChar = str.charAt(i);
  if (curChar == "=") {
    str = str.substring(1, i) + "≠" + str.substring(i + curChar.length);
    curChar = "≠";
  }
}

文字列からASCII文字の値のみを検索/置換する場合、[ ]配列演算子を使用した文字列検索を使用できます。

string str = "Σ=σ";
for (int i = 1; i <= str.length; i++) {
  if (str[i] == '=') // comparing a byte to an ASCII character works fine
    str[i] = '#'; // setting a byte to an ASCII character works fine, 
                  // as long as the existing byte was already an ASCII character.
 }

最後に、stringには、文字インデックスとバイトインデックスの変換を行うbyteToCharIndex()メソッドとcharToByteIndex()メソッドが用意されています。なお、これらのメソッドは文字列の検索を必要とするため、長い文字列の場合は時間がかかります。

プロパティ

length 文字列の長さ(バイト単位)。

メソッド

byteToCharIndex 文字列内の特定のバイトインデックスに関連付けられた文字インデックスを返します。
charAt 文字列内の指定されたバイトインデックスにある文字を返します。
charToByteIndex 文字列内の特定の文字インデックスに関連付けられたバイトインデックスを返します。
endsWith 文字列が指定の部分文字列で終わっているかどうかをチェックします。
includes 文字列に指定の部分文字列が含まれているかどうかをチェックします。
indexOf 指定された部分文字列の最初の出現先のインデックスを返します。
lastIndexOf 指定された部分文字列の最後の出現先のインデックスを返します。
match 文字列からパターンとの一致を検索します。
padEnd 文字列が指定の長さになるまで、末尾をpadStringでパディングします。
padStart 文字列が指定の長さになるまで、先頭をpadStringでパディングします。
repeat オリジナルのコピーから新しい文字列を作成します。
replace 文字列を別の文字列に置き換えます。
search 文字列から内部文字列またはパターンを検索します。
slice 文字列の断片を抽出して、新しい文字列を返します。
split 文字列を部分文字列の配列に分割します。
startsWith 文字列が指定の部分文字列で始まっているかどうかをチェックします。
substr 文字列の断片を抽出して、新しい文字列を返します。
toLowerCase すべての文字を小文字に変換します。
toNum 文字列の内容を浮動小数点数として解釈します。
toUpperCase すべての文字を大文字に変換します。
trim 先行する空白と後続の空白を除去します。

静的メソッド

fromNum 指定された数値を文字列に変換します。

演算子

!= 2つの文字列を比較します。
[ ] 文字列内のバイト要素を取得または設定します。
+ 2つの文字列を連結します。
+= 他の文字列と連結する文字列を代入します。
== 2つの文字列を比較します。

詳細

削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.length

readonly int length

説明

文字列の長さ(バイト単位)。

int numBytes = str.length;
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.byteToCharIndex()

int byteToCharIndex( int byteIndex )

パラメータ

byteIndex ターゲット文字の1ベースのバイトインデックス。

戻り値

int 文字の1ベースの文字インデックス。

説明

文字列内の特定のバイトインデックスに関連付けられた文字インデックスを返します。


        string text = "Σ=σ";
        int charIndex = text.byteToCharIndex(text.search("="));  // 2
        int numChars = text.byteToCharIndex(text.length); // 3 - the number of characters in the string
      
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.charAt()

string charAt( int byteIndex )

パラメータ

byteIndex ターゲット文字の1ベースのバイトインデックス。

戻り値

string ターゲット文字(文字列)。

説明

文字列内の指定されたバイトインデックスにある文字を返します。

string text = "Hello World!";
string e = text.charAt(2);  // "e"
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.charToByteIndex()

int charToByteIndex( int charIndex )

パラメータ

charIndex ターゲット文字の1ベースの文字インデックス。

戻り値

int 文字の1ベースのバイトインデックス。

説明

文字列内の特定の文字インデックスに関連付けられたバイトインデックスを返します。

string text = "Σ=σ";
int byteIndex = text.charToByteIndex(2);  // 3
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.endsWith()

int endsWith( string str )

パラメータ

str 検索する部分文字列。

戻り値

int 文字列が指定の部分文字列で終わっている場合は1、それ以外の場合は0。

説明

文字列が指定の部分文字列で終わっているかどうかをチェックします。

string text = "Hello World!";
int worldEnd = text.endsWith("World!");  // 1
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.includes()

int includes( string str )

パラメータ

str 検索する部分文字列。

戻り値

int 文字列に指定の部分文字列が含まれている場合は1、それ以外の場合は0。

説明

文字列に指定の部分文字列が含まれているかどうかをチェックします。

string text = "Hello World!";
int containsWorld = text.includes("World");  // 1
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.indexOf()

int indexOf( string str )

パラメータ

str 検索する部分文字列。

戻り値

int 指定された部分文字列の最初の出現先のバイトインデックス。出現しない場合は-1。

説明

指定された部分文字列の最初の出現先のインデックスを返します。


        string text = "Hello World!";
        int oIndex = text.indexOf("o");  // 5
      
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.lastIndexOf()

int lastIndexOf( string str )

パラメータ

str 検索する部分文字列。

戻り値

int 指定された部分文字列の最後の出現先のバイトインデックス。出現しない場合は0。

説明

指定された部分文字列の最後の出現先のインデックスを返します。


        string text = "Hello World!";
        int oIndex = text.indexOf("o");  // 8
      
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.match()

RegExResult match( RegExp pattern )

パラメータ

pattern 検索する文字列のパターン。正規表現。

戻り値

RegExResult 一致へのアクセスを提供するRegExResultオブジェクト。

説明

文字列からパターンとの一致を検索します。

string str = "A noisy noise annoys an oyster.";
var result = str.match(/nois/g);
Array matches = [result[1], result[2]]; // ["nois", "nois"]

正規表現の詳細については、replace()メソッドを参照してください。

削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.padEnd()

string padEnd( int targetLength , string padString = " " )

パラメータ

targetLength パディング先の文字列に必要な長さ。
padString 現在の文字列をパディングする際に使用する文字列。

戻り値

string 指定された長さまでパディングされた文字列。

説明

文字列が指定の長さになるまで、末尾をpadStringでパディングします。

文字列が指定のtargetLengthになるまで、末尾をpadStringでパディングします。targetLengthが文字列の長さ未満の場合は、パディングせずに文字列を返します。

string s = "abc";
s.padEnd(10);         // "abc       "
s.padEnd(10, "foo");  // "abcfoofoof"
s.padEnd(6,"123465"); // "abc123"
s.padEnd(8, "0");     // "abc00000"
s.padEnd(1);          // "abc"
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.padStart()

string padStart( int targetLength , string padString = " " )

パラメータ

targetLength パディング先の文字列に必要な長さ。
padString 現在の文字列をパディングする際に使用する文字列。

戻り値

string 指定された長さまでパディングされた文字列。

説明

文字列が指定の長さになるまで、先頭をpadStringでパディングします。

文字列が指定のtargetLengthになるまで、先頭をpadStringでパディングします。targetLengthが文字列の長さ未満の場合は、パディングせずに文字列を返します。

string s = "abc";
s.padStart(10);         // "       abc"
s.padStart(10, "foo");  // "foofoofabc"
s.padStart(6,"123465"); // "123abc"
s.padStart(8, "0");     // "00000abc"
s.padStart(1);          // "abc"
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.repeat()

string repeat( int numRepeats )

パラメータ

numRepeats 繰り返しの数。

戻り値

string オリジナルのコピーで構成された新しい文字列。

説明

オリジナルのコピーから新しい文字列を作成します。

string str = "Clap";
string applause = str.repeat(3);  // "ClapClapClap"
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.replace()

string replace( string findStr , string replaceWith , int replaceAll = 0 )
string replace( RegExp findPattern , string replaceWith )

パラメータ

findStr 検索する文字列。
replaceWith findStrを置き換える文字列。
replaceAll findStrのすべてのインスタンスを置き換える場合、1に設定します。
findPattern 検索する文字列のパターン。正規表現。

戻り値

string 文字列のコピー。検索パターンが新しい文字列に置き換えられています。

説明

文字列を別の文字列に置き換えます。

正規表現

正規表現は、検索する文字列のパターンを指定する簡潔な方法です。正規表現を前方スラッシュ「/」で囲んで(文字列を引用符で囲むのと同様)から、修飾子を追加します。

/pattern/modifiers
/[0-9]+/g

正規表現構文の簡単な説明を以下に示します。

修飾子

正規表現の終了を示す/の後に配置し、その動作を修飾します。

g - グローバルな一致。最初の出現だけでなく、すべての出現に一致します。

i - 大文字と小文字を区別しない一致。

括弧

[] - 括弧内の任意の文字に一致します。ダッシュを使用して文字の範囲を指定できます。

[abc] - a、b、またはcに一致します。
[a-z] - 任意の小文字に一致します。
[0-9]- 任意の数字に一致します。
[^abc]- a、b、c以外の任意の文字に一致します。

OR

| - |で区切られた任意の選択肢に一致します。

(abc|cba) - 「abc」または「cba」というシーケンスに一致します。
(gray|grey)またはgr(a|e)y - 「gray」と「grey」に一致します。

数量詞

直前の式に一致する文字の反復回数を定義します。

* - 指定された文字の0回以上の繰り返しに一致します。

ab*c - 「ac」、「abc」、「abbc」、「abbbc」などに一致します。基本的に、a、次に任意の数のb、その次にcが続く任意の文字列に一致します。

+ - 指定された文字の1回以上の繰り返しに一致します。

ab+c - ab*cとほぼ同じですが、「ac」には一致しません。

? - 指定された文字が0または1つある任意の文字列に一致します。

colou?r - 「color」と「colour」の両方に一致しますが、「colouur」には一致しません。

繰り返し

{n} - n個の出現と一致します。

{m,n} - m個以上n個以下の出現と一致します。

ピリオド

.- 任意の文字と一致します。

\.- ピリオドと一致します。

キャプチャーグループ

括弧を使用してキャプチャーグループを定義することもできます。文字パターンを括弧で囲むことにより、括弧内に一致する結果が保存され、文字列の置き換えに使用されます。置換文字列内で$1や$2などの項目を使用して、検索パターンで取得された1つ目、2つ目、3つ目などのグループを参照します。

例:

次のコードはすべての数値を削除します。まず、0~9の数字とその繰り返しを長さに関係なく検索するために、[0-9]と指定し、その後ろに+を追加します。最後に、すべての出現と一致するようにg修飾子を追加します。


string text = "300 out of 500 soda cans";
return text.replace(/[0-9]+/g, "");  // " out of  soda cans"
      		

次のコードは、「blue」または「green」を、大文字と小文字を問わず「red」に置き換えます。


string text = "Blue cars are really green.";
return text.replace(/blue|green/gi, "red");  // "red cars are really red."
      		

次のコードは、bで始まりtで終わる3文字の単語をすべて置き換えます。


string text = "My favorite words are: bit bat but bot bet.";
return text.replace(/b[aeiou]t/g, "Money"); // My favorite words are: Money Money Money Money Money.
      		

次のコードは、電子メールアドレスを非表示にします。「\.」は、任意の文字ではなく、ピリオドであることを示したい場合に使用します。


string text = "Email me at [email protected] or [email protected]";
return text.replace(/([a-z0-9_\.-]+)@([0-9a-z\.-]+)\.([a-z\.]{2,6})/g, "###"); //Email me at ### or ###
			

FlexScriptの文字列の正規表現の実装では、その機能にc++の正規表現ライブラリとECMAScript文法が使用されています。当社の設計は、JavaScriptの正規表現の実装からも影響を受けています。string.replace()メソッドの正規表現オーバーロードは、std::regex_replace呼び出しのラッパーです。正規表現の作成の詳細については、該当するドキュメントを参照してください。なお、JavaScriptの正規表現フラグ/m、/y、/uは、(まだ)実装されていません。

削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.slice()

string slice( int beginIndex , int endIndex = 0 )

パラメータ

beginIndex 抽出する最初の文字の1ベースのバイトインデックス。このインデックスがマルチバイト文字の中間にある場合、文字全体を抽出します。負の数字なら、文字列の末尾からインデックス付けされたオフセットです。
endIndex 最後の文字の1ベースのバイトインデックス。抽出は、このインデックスにある文字の手前まで行われます。インデックスがマルチバイト文字の中間にある場合、抽出対象にはこの文字全体が含まれます。このパラメータが省略された場合は、文字列の最後まで抽出されます。パラメータが負なら、文字列の末尾からインデックス付けされたオフセットです。

戻り値

string 抽出された文字列。

説明

文字列の断片を抽出して、新しい文字列を返します。

string text = "Hello World!";
string subText = text.slice(1, 6);  // "Hello"

負の数字を使用すると、文字列の末尾から開始します。

string text = "Hello World!";
string subText = text.slice(-6); // "World!"

削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.split()

Array split( string delimiter = "" , int limit = -1 )
Array split( RegExp delimiter , int limit = -1 )

パラメータ

delimiter 文字列を分割するセパレータを示す文字列。このパラメータが省略された場合や空の文字列の場合は、各文字が個別の配列要素に分割されます。
limit 返す配列要素の最大数。省略された場合は、文字列全体が分割されます。

戻り値

Array 指定されたセパレータが見つかった場合に、文字列を分割することによって作成された部分文字列の配列。

説明

文字列を部分文字列の配列に分割します。

string str = "Hello, how are you?";
Array subStrings = str.split(" ", 3);  // ["Hello,", "how", "are"]
      		
string csv = "foo,bar,,baz";
Array subStrings = csv.split(",");  // ["foo", "bar", "", "baz"]
      		

区切る文字列の検索には、正規表現も使用できます。このコードは数値を削除します。

string str = "abcd123efg456hij789klm0";
Array subStrings = str.split(/[0-9]+/g);  // ["abcd", "efg", "hij", "klm", ""]
      		

正規表現の詳細については、replace()メソッドを参照してください。

削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.startsWith()

int startsWith( string str )

パラメータ

str 検索する部分文字列。

戻り値

int 文字列が指定の部分文字列で始まる場合は1、それ以外の場合は0。

説明

文字列が指定の部分文字列で始まっているかどうかをチェックします。

string text = "Hello World!";
int worldStart = text.startsWith("Hello");  // 1
      		
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.substr()

string substr( int beginIndex , int length )

パラメータ

beginIndex 抽出する最初の文字の1ベースのバイトインデックス。このインデックスがマルチバイト文字の中間にある場合、文字全体を抽出します。負の数字なら、文字列の末尾からのオフセットになります。
length ターゲット文字列の長さ(バイト単位)。

戻り値

string 抽出された文字列。

説明

文字列の断片を抽出して、新しい文字列を返します。

string text = "Hello World!";
string subText = text.substr(1, 5);  // "Hello"

最初のパラメータが負なら、末尾からその数だけの文字をカウントします。

string text = "Hello World!";
string subText = text.substr(-6, 5); // "World" without the "!"

削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.toLowerCase()

string toLowerCase( )

戻り値

string すべて小文字の新しい文字列。

説明

すべての文字を小文字に変換します。

string text = "Hello World!";
string lower = text.toLowerCase();  // "hello world!"
      		
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.toNum()

double toNum( )

戻り値

double 文字列の内容をダブルとして解釈したもの。

説明

文字列の内容を浮動小数点数として解釈します。

string text = "1.5";
double number = text.toNum(); // 1.500
          
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.toUpperCase()

string toUpperCase( )

戻り値

string すべて大文字の新しい文字列。

説明

すべての文字を大文字に変換します。

string text = "Hello World!";
string lower = text.toUpperCase();  // "HELLO WORLD!"
      		
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.trim()

string trim( )

戻り値

string トリミングされた文字列。

説明

先行する空白と後続の空白を除去します。

string text = "     Hello World!     ";
string trim = text.trim();  // "Hello World!"
      		
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.fromNum()

static string fromNum( double num , int precision = -1 )

パラメータ

num 変換する数値。
precision 出力する小数点以下の桁数。自動精度の場合は-1を使用します。

戻り値

string 数値の文字列表現。

説明

指定された数値を文字列に変換します。

string text1 = string.fromNum(1.5); // "1.5"
string text2 = string.fromNum(1.5, 2); // "1.50"
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.operator !=

int operator !=( string otherString )

パラメータ

otherString この文字列と比較する文字列。

戻り値

int 文字列が等しい場合は真、それ以外の場合は偽。

説明

2つの文字列を比較します。

"Hello" != "hello" // true
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.operator [ ]

int operator [ ]( int byteIndex )

パラメータ

byteIndex ターゲットバイトの1ベースのバイトインデックス。

戻り値

int 配列の要素。

説明

文字列内のバイト要素を取得または設定します。

[ ]演算子は、文字列の個々の要素にバイト値としてアクセスします。ASCII文字列の場合は、'A'、'B'、'C'などの単一引用符リテラルを使用したASCII文字値と比較できます。すべてのASCII文字値が整数範囲の1~127に含まれます。マルチバイト文字の場合は、個々のバイトにアクセスすると、整数範囲の128~255の値が返されます。[ ]演算子を使用してアクセスされる文字列内の非ASCIIマルチバイト文字は読み取り専用です。[ ]演算子を使用してマルチバイト文字列の一部のバイトの値を設定しようとすると、FlexSimが例外をスローします。

string str = "Σ=σ";
for (int i = 1; i <= str.length; i++) {
  if (str[i] == '=') // comparing a byte to an ASCII character works fine
    str[i] = '#'; // setting a byte to an ASCII character works fine, 
                  // as long as the existing byte was already an ASCII character.
  if (str[i] >= 128)
    str[i] = ' '; // setting a byte that is part of a multi-byte character will throw an exception
 }
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.operator +

string operator +( string otherString )

パラメータ

otherString この文字列と連結する文字列。

戻り値

string 連結された新しい文字列。

説明

2つの文字列を連結します。

string str = "Hello" + ", how are you?"; // "Hello, how are you?"
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.operator +=

string operator +=( string otherString )

パラメータ

otherString この文字列と連結する文字列。

戻り値

string 連結した文字列を変数に代入します。

説明

他の文字列と連結する文字列を代入します。


string str = "Hello"
str += ", how are you?";  // "Hello, how are you?"
      		
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

string.operator ==

int operator ==( string otherString )

パラメータ

otherString この文字列と比較する文字列。

戻り値

int 文字列が正確に一致する場合は真、それ以外の場合は偽。

説明

2つの文字列を比較します。

"Hello" == "Hello" // true