Next: , Previous: , Up: 文字列と文字   [Contents][Index]


4.3 文字列の作成

以下の関数はスクラッチ、文字列同士、またはその一部から文字列を作成します(string-replacereplace-regexp-in-stringのように他の文字列内容を変更して文字列を作成する関数については検索と置換を参照)。

Function: make-string count character &optional multibyte

この関数はcharactercount回繰り返すことにより作成された文字列をリターンする。countが負ならエラーをシグナルする。

(make-string 5 ?x)
     ⇒ "xxxxx"
(make-string 0 ?x)
     ⇒ ""

characterASCII文字なら、結果は通常はユニバイト文字列になる。しかしオプション引数multibyteが非nilなら、この関数はかわりにマルチバイト文字列を生成する。これは結果を後で非ASCII文字列と結合したり、結果の中のいくつかの文字を非ASCII文字で置換する必要がある際に有用。

この関数に対応する他の関数にはmake-vector (ベクターを参照)やmake-list (コンスセルおよびリストの構築を参照)が含まれる。

Function: string &rest characters

この関数は文字charactersを含む文字列をリターンする。

(string ?a ?b ?c)
     ⇒ "abc"
Function: substring string &optional start end

この関数はstringから、インデックスstartの文字(その文字を含む)とendの文字(その文字は含まない)の間の範囲の文字で構成される、新しい文字列をリターンする。文字列の最初の文字はインデックス0。引数が1つなら、この関数は単にstringをコピーする。

(substring "abcdefg" 0 3)
     ⇒ "abc"

上記の例では‘a’のインデックスは0、‘b’のインデックスは1、‘c’のインデックスは2となる。インデックス3 — この文字列の4番目の文字 — は、コピーされる部分文字列の文字位置までをマークする。したがって文字列"abcdefg"から‘abc’がコピーされる。

負の数は文字列の最後から数えることを意味するので、-1は文字列の最後の文字のインデックスである。たとえば:

(substring "abcdefg" -3 -1)
     ⇒ "ef"

この例では‘e’のインデックスは-3、‘f’のインデックスは-2、‘g’のインデックスは-1。つまり‘e’と‘f’が含まれ、‘g’は含まれない。

endnilを使用した場合、それは文字列の長さを意味する。したがって、

(substring "abcdefg" -3 nil)
     ⇒ "efg"

引数endを省略した場合、それはnilを指定したのと同じである。(substring string 0)stringのすべてをコピーしてリターンする。

(substring "abcdefg" 0)
     ⇒ "abcdefg"

しかしこの目的のためにはcopy-sequenceを推奨する(シーケンスを参照)。

stringからコピーされた文字がテキストプロパティーをもつなら、そのプロパティーは新しい文字列へもコピーされる。テキストのプロパティを参照のこと。

substringの最初の引数にはベクターも指定できる。たとえば:

(substring [a b (c) "d"] 1 3)
     ⇒ [b (c)]

startが整数でない、またはendが整数でもnilでもななければ、wrong-type-argumentエラーがシグナルされる。startendの後の文字を指す、またはstringにたいして範囲外の整数をいずれかに指定すると、args-out-of-rangeエラーがシグナルされる。

この関数に対応するのはbuffer-substring (バッファーのコンテンツを調べるを参照)で、これはカレントバッファー内のテキストの一部を含む文字列をリターンする。文字列の先頭はインデックス0だが、バッファーの先頭はインデックス1である。

Function: substring-no-properties string &optional start end

これはsubstringと同じように機能するが、値のすべてのテキストプロパティーを破棄する。startを省略したりnilを指定することができ、その場合は0と等価である。したがって(substring-no-properties string)は、すべてのテキストプロパティーが削除されたstringのコピーをリターンする。

Function: concat &rest sequences

この関数は渡された引数内の文字からなる文字列をリターンする(もしあればテキストプロパティーも)。引数には文字列、数のリスト、数のベクターを指定できる。引数は変更されない。concatに引数を指定しなければ空文字列をリターンする。

(concat "abc" "-def")
     ⇒ "abc-def"
(concat "abc" (list 120 121) [122])
     ⇒ "abcxyz"
;; nilは空のシーケンス。
(concat "abc" nil "-def")
     ⇒ "abc-def"
(concat "The " "quick brown " "fox.")
     ⇒ "The quick brown fox."
(concat)
     ⇒ ""

この関数は常に新たな文字列の割り当てを行う訳ではない。呼び出し側は結果が新たな文字列であること、もしくは既存の文字列にたいしてeqであることに依存しないよう推奨する。

特にリターン値を変更すると誤って別の文字列を変更したり、プログラム内の定数文字列の変更や、エラーをraiseすることさえあり得る。安全に変更できる文字列を取得するには、結果にcopy-sequenceを使用すること。

他の結合関数(concatenation functions)についての情報は関数のマッピングmapconcatベクターのための関数vconcatコンスセルおよびリストの構築appendを参照のこと。シェルコマンドで使用される文字列の中に、個々のコマンドライン引数を結合するには、combine-and-quote-stringsを参照されたい。

Function: split-string string &optional separators omit-nulls trim

この関数は正規表現separators(正規表現を参照)にもとづいて、stringを部分文字列に分解する。separatorsにたいする各マッチは分割位置を定義する。分割位置の間にある部分文字列をリストにまとめてリターンする。

separatorsnil (か省略)ならデフォルトはsplit-string-default-separatorsの値となり、関数はomit-nullstであるかのように振る舞う。

omit-nullsnil(または省略)なら、連続する2つのseparatorsへのマッチか、stringの最初か最後にマッチしたときの空文字列が結果に含まれる。omit-nullstなら、これらの空文字列は結果から除外される。

オプションの引数trimが非nilなら、その値は各部分文字列の最初と最後からトリム(trim: 除去)するテキストにマッチする正規表現を指定する。トリムによりその部分文字列が空になるようなら、それは空文字列として扱われる。

文字列を分割してcall-processstart-processに適するような、個々のコマンドライン引数のリストにする必要がある場合はsplit-string-and-unquoteを参照のこと。

以下は例:

(split-string "  two words ")
     ⇒ ("two" "words")

有用性はほとんどないであろう("" "two" "words" "")という結果とはならない。このような結果が必要ならseparatorsに明示的な値を使用すること

(split-string "  two words "
              split-string-default-separators)
     ⇒ ("" "two" "words" "")
(split-string "Soup is good food" "o")
     ⇒ ("S" "up is g" "" "d f" "" "d")
(split-string "Soup is good food" "o" t)
     ⇒ ("S" "up is g" "d f" "d")
(split-string "Soup is good food" "o+")
     ⇒ ("S" "up is g" "d f" "d")

空のマッチはカウントされます。例外は、空でないマッチを使用することにより、すでに文字列の最後に到達しているとき、またはstringが空の時で、この場合split-stringは最後の空マッチを探しません。

(split-string "aooob" "o*")
     ⇒ ("" "a" "" "b" "")
(split-string "ooaboo" "o*")
     ⇒ ("" "" "a" "b" "")
(split-string "" "")
     ⇒ ("")

しかしseparatorsが空文字列にマッチできるとき、通常はomit-nullstにすれば、前の3つの例の不明瞭さはほとんど発生しない:

(split-string "Soup is good food" "o*" t)
     ⇒ ("S" "u" "p" " " "i" "s" " " "g" "d" " " "f" "d")
(split-string "Nice doggy!" "" t)
     ⇒ ("N" "i" "c" "e" " " "d" "o" "g" "g" "y" "!")
(split-string "" "" t)
     ⇒ nil

空でないマッチより空のマッチを優先するような、一部の“非貪欲(non-greedy)”な値をseparatorsに指定することにより、幾分奇妙(ではあるが予見可能)な振る舞いが発生することがある。繰り返しになるが、そのような値は実際には稀である:

(split-string "ooo" "o*" t)
     ⇒ nil
(split-string "ooo" "\\|o+" t)
     ⇒ ("o" "o" "o")
Variable: split-string-default-separators

split-stringseparatorsにたいするデフォルト値。通常の値は"[ \f\t\n\r\v]+"

Function: string-clean-whitespace string

string内の連続する空白文字を単一のスペースに、同様にstringの先頭と終端にあるすべての空白文字を取り除くことにより空白文字を整理する。

Function: string-trim-left string &optional regexp

stringの先頭からregexpにマッチするテキストを削除する。regexpのデフォルトは‘[ \t\n\r]+’。

Function: string-trim-right string &optional regexp

stringの末尾からregexpにマッチするテキストを削除する。regexpのデフォルトは‘[ \t\n\r]+’。

Function: string-trim string &optional trim-left trim-right

stringからtrim-leftにマッチする先頭のテキストと、trim-rightにマッチする末尾のテキストを削除する。いずれのregexpもデフォルトは‘[ \t\n\r]+’。

Function: string-fill string length

lengthより長い行が無くなるようにstringのワードラップを試みる。フィルは空白文字境界でのみ行われる。lengthより長い個別の単語は短くならない。

Function: string-limit string length &optional end coding-system

stringの文字数がlengthより短ければstringをそのままリターンする。それ以外なら最初のlength文字からなるstringの部分文字列をリターンする。オプションのパラメーターendが与えられた場合には、かわりに最後のlength文字からなる文字列をリターンする。

coding-systemが非nilならstringを切り詰める前にエンコードして、結果はlengthバイトより短いユニバイト文字列になる。stringにエンコードされると複数バイトになる文字(たとえばutf-8使用時)が含まれる場合には、結果となるユニバイト文字列が文字表現の途中で切り詰められることはない。

この関数は文字列長を文字数かバイトで数えるので、文字列がを表示用に短くする必要がある場合には一般的に適していない。かわりにtruncate-string-to-widthwindow-text-pixel-sizeを使用すること(表示されるテキストのサイズを参照)。

Function: string-lines string &optional omit-nulls

改行を境界としてstringを文字列のリストに分割する。omit-nullsなら結果から空行を除外する。

Function: string-pad string length &optional padding start

paddingをパディング文字に使用して、与えられたlengthになるようにstringをパディングする。paddingのデフォルトはスペース文字。lengthよりstringが長ければパディングしない。startnil (または省略)ならパディングは文字列終端、非nilなら文字列先頭に追加される。

Function: string-chop-newline string

stringからもしあれば最後の改行を削除する。


Next: 文字列の変更, Previous: 文字列のための述語, Up: 文字列と文字   [Contents][Index]