Luaのstringライブラリ(文字列関数ライブラリ)のまとめ

5339 ワード

Lua解釈器は文字列のサポートが限られている.1つのプログラムは文字列を作成して文字列を接続することができますが、サブ列を切り取ることはできません.文字列のサイズをチェックし、文字列の内容を検出します.Luaで文字列を操作する機能は、基本的にstringライブラリから来ています.
文字列ライブラリのいくつかの関数は非常に簡単です.
string.len(s)は文字列sの長さを返す.string.rep(s,n)は、n回繰り返される文字列sの列を返す.stringを使いますrep(「a」,2^20)は、1 M bytesの文字列を作成することができます(たとえば、テストのために必要です).string.lower(s)はsの大文字を小文字に変換する(string.upperは小文字を大文字に変換する).大文字と小文字を気にせずに配列をソートしたい場合は、次のようにします.
 
  
table.sort(a, function (a, b) return string.lower(a) < string.lower(b) end)

string.upper(s)sの小文字を大文字に変換
                            string.upperとstring.lowerは、ローカル環境変数に依存します.だから、European Latin-1環境では、式:
 
 
  
string.upper("a??o")    --> "A??O"

string.sub(s,i,j)関数は、文字列sのi番目の文字からj番目の文字までの列を切り取る.Luaでは、文字列の最初の文字インデックスが1から始まります.負のインデックスを使用することもできます.負のインデックスは文字列の最後から前にカウントされます.-1は最後の文字を指し、-2は最後から2番目を指します.だから、string.sub(s,1,j)は、文字列sの長さjのプレフィックスを返す.string.sub(s,j,−1)は、j番目の文字から始まる接尾辞を返す.3番目のパラメータが指定されていない場合は、デフォルトは-1ですので、最後の呼び出しをstringと書きます.sub(s, j);string.sub(s,2,−2)は、最初の文字と最後の文字を除去したサブ列を返す.
 
  
s = "[in brackets]"
print(string.sub(s, 2, -2)) --> in brackets

覚えておいてください:Luaの文字列は一定です.string.sub関数およびLua内の他の文字列操作関数は、文字列の値を変更するのではなく、新しい文字列を返します.一般的なエラーは次のとおりです.
 
  
string.sub(s, 2, -2)

上記の関数は文字列sの値を変えると考えられます.文字列変数の値を変更するには、新しい文字列に変数を割り当てる必要があります.
 
  
s = string.sub(s, 2, -2)

string.char関数とstring.byte関数は、文字と数字を変換するために使用されます.string.charは0個以上の整数を取得し、各数字を文字に変換し、これらの文字が接続されているすべての文字列を返します.string.byte(s,i)は、文字列sのi番目の文字を整数に変換する.2番目のパラメータはオプションで、デフォルトではi=1です.次の例では、文字はASCIIで表されると仮定します.
 
  
print(string.char(97)) --> a
i = 99; print(string.char(i, i+1, i+2)) --> cde
print(string.byte("abc")) --> 97
print(string.byte("abc", 2)) --> 98
print(string.byte("abc", -1)) --> 99

上の最後の行では、負のインデックスを使用して文字列の最後の文字にアクセスします.
Luaはstringを提供した.format()関数は、特定のフォーマットを有する文字列を生成するものであり、関数の最初のパラメータはフォーマット(formatstring)であり、その後は対応するフォーマットの各符号の各種データである.フォーマット文字列の存在により、生成する長い文字列の可読性が大幅に向上する.この関数のフォーマットはC言語のprintf()に似ている.関数string.formatは文字列をフォーマットする際、特に文字列出力に用いられる強力なツールです.この関数には2つのパラメータがあり、C言語のprintfに従ってこの関数を使用することができます.最初のパラメータはフォーマット列です.インジケータと制御フォーマットの文字からなります.インジケータ後の制御フォーマットの文字は、10進数'd';16進法'x';8進法「o」;浮動小数点数'f';文字列's'です.インジケータ'%'と制御フォーマット文字の間には、浮動小数点数の桁数など、より詳細なフォーマットを制御するための他のオプションもあります.
フォーマット文字列には、次のエスケープコードが含まれます.
 
  
%c - , ASCII
%d, %i -
%o -
%u -
%x - ,
%X - ,
%e - , e
%E - , E
%f -
%g(%G) - %e(%E, %G) %f
%q - Lua
%s -

フォーマットをさらに細かくするには、%番号の後にパラメータを追加することができる.パラメータは次の順序で読み込まれます.
(1)記号:1つの+記号がその後を表す数字エスケープ記号は正数に正数を表示させる.デフォルトでは負の数の表示記号のみが表示されます.(2)プレースホルダ:文字列の幅が後から指定する場合のプレースホルダ.記入しない場合のデフォルトのプレースホルダはスペースです.(3)整列ID:文字列の幅を指定する場合、デフォルトでは右揃え、プラス-記号では左揃えに変更することができる.(4)幅数値(5)小数位数/文字列裁断:幅数値の後に増加する小数部n、後接f(浮動小数点数エスケータ、例えば%6.3 f)では、この浮動小数点数の小数はnビットのみを保持するように設定、後接s(文字列エスケータ、例えば%5.3 s)では、この文字列が前nビットのみを表示するように設定.
これらのパラメータの後には、上述のようなエスケープ符号の種類(c,d,i,f,…)がある.
 
  
print(string.format("pi = %.4f", PI))
      --> pi = 3.1416
d = 5; m = 11; y = 1990
print(string.format("%02d/%02d/%04d", d, m, y))
        --> 05/11/1990
tag, title = "h1", "a title"
print(string.format("%s%s>", tag, title, tag))
        -->

a title



最初の例では、%.4 fは小数点の後ろに4桁の小数点数がある浮動小数点数を表す.第2の例%02 dは、固定された2ビットで10進数を表示し、不足した前補0を表す.一方、%2 dの前には0が指定されておらず、2桁未満の場合は空白で補完されます.フォーマット列部分インジケータについては、Luaが標準Cのprintf関数を呼び出して最終的な機能を実現するため、luaマニュアル、またはCマニュアルを参照することを詳細に記述しなければならない.
以下に例を示します.
 
  
string.format("%%c: %c", 83)            S
string.format("%+d", 17.0)              +17
string.format("%05d", 17)               00017
string.format("%o", 17)                 21
string.format("%u", 3.14)               3
string.format("%x", 13)                 d
string.format("%X", 13)                 D
string.format("%e", 1000)               1.000000e+03
string.format("%E", 1000)               1.000000E+03
string.format("%6.3f", 13)              13.000
string.format("%q", "One
Two")         "One\
                                          Two"
string.format("%s", "monkey")           monkey
string.format("%10s", "monkey")             monkey
string.format("%5.3s", "monkey")          mon