0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Kinx ライブラリ - String

Last updated at Posted at 2020-04-05

String

はじめに

「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」 でお届けしているスクリプト言語 Kinx。言語はライブラリが命。ということでライブラリの使い方編。

今回は String です。

文字列操作の基本インターフェース。String オブジェクトに括り付いたメソッドは特殊メソッド(と呼ぶメソッドがある、名前は今決めた)扱いで、文字列オブジェクトに直接作用させることができる。

String 特殊オブジェクト

特殊メソッドを持つオブジェクトを特殊オブジェクトと呼び(←今決めた)、String、Array、Integer、Double、Binary がある。特殊メソッドは、特殊オブジェクトが対象としているオブジェクト(String なら文字列)に対して直接作用させることができる。

例えば、以下のように関数定義してみよう。

String.greeting = function(name) {
    System.println("Hello, I am %{name}.");
};

すると、以下のように書くことができるようになる。

"John".greeting();

実行してみよう。

Hello, I am John.

使い方によっては便利。ただし、ライブラリの追加(組み込み特殊メソッドの追加)で使う可能性がある ので乱用はあまりしないほうが良いかもしれない。

String

組み込み特殊メソッド

メソッド 意味
String.startsWith(str) 文字列が str で始まれば true。
String.endsWith(str) 文字列が str で終れば true。
String.find(str) 文字列の中で str が見つかった位置(0~)を返す。見つからなかった場合は -1 を返す。
String.subString(str, start[, len]) str の部分文字列を返す。
String.replace(str, cond, repl) str から cond にマッチする部分を全て repl に置換する。cond は文字列または正規表現オブジェクトの指定が可能。
String.toInt(str) str を整数値に変換する。
String.toDouble(str) str を実数値に変換する。
String.parentPath(str) str をパスと認識し、親パスとなる部分文字列を返す。例)"ab/cd/ef.x".parentPath()"ab/cd.x"
String.filename(str) str をパスと認識し、親パス部分を削除したファイル名部分文字列を返す。例)"ab/cd/ef.x".filename()"ef.x"
String.stem(str) str をパスと認識し、ファイル名の stem 部分文字列を返す。例)"ab/cd/ef.x".stem()"ef"
String.extnsion(str) str をパスと認識し、ファイル名の拡張子部分文字列を返す。例)"ab/cd/ef.x".extnsion()".x"
String.split(str, sep) strsep を区切り文字として分割し、配列として返す。sep は文字列、または正規表現オブジェクトの指定が可能。
String.each(str, callback) str を 1 文字ずつ分割し、それを引数にして callback 関数を呼び出す。callback 関数の第 2 引数に index (0~) も渡される。

each は現在残念ながら日本語はうまく分割してくれないので注意。正式リリースまでに UTF-8 対応はさせる予定。

特殊オペレーター

/ オペレーター

文字列に対して / オペレーターを適用した場合、/ で連結した文字列を返す。その際、重複したセパレータは 1 つになる。

var a = "aa/bb" / "ccdd";   // => "aa/bb/ccdd"
var b = "aa/bb/" / "ccdd";  // => "aa/bb/ccdd"
var c = "aa/bb" / "/ccdd";  // => "aa/bb/ccdd"

=~ オペレーター

文字列に対して =~ を適用した場合、右辺値には正規表現オブジェクトを期待する。正規表現のオブジェクトではなかった場合、例外が送出される。

!~ オペレーター

文字列に対して !~ を適用した場合、右辺値には正規表現オブジェクトを期待する。正規表現のオブジェクトではなかった場合、例外が送出される。

後置 [] オペレーター

文字列に対してインデックスアクセスをした場合、その位置にある文字コードを整数値で返す。したがって、「5 文字目が 'a' である」という判断をする場合は以下のように書く。

if (str[5] == 'a'[0]) {
    /* ... */
}

ちょっと C と違うことに注意。文字 'a' は文字ではなく 文字列リテラル のため、最初の文字を示す [0] が必要。

単項 * オペレーター

単項 * オペレーターを文字列に適用した場合、文字列を配列に変換する。

var a = *"abc";  // => [97, 98, 99]

尚、補足として配列に単項 * オペレーターを適用すると、文字列に戻ってくる。

おわりに

文字列操作を簡単にしたいがためにスクリプト言語を使う、というのもよくあるシーン。そもそもコレ系スクリプトの元祖的な位置付けである Perl はテキスト処理が楽、ということで使われてた経緯もありますし。そういう意味で、文字列操作はプリミティブですが重要な機能。テキスト処理は C で書きたくない処理の一つですね。

ではまた次回。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?