部分文字列をインデックスで指定して取得するには (substr)

1文字だけを取得する方法はcharAt参照。

Java / Scala

Javaでの例

String str2 = str.substring(2, 4);

Scalaでの例

val str2 = str.substring(2, 4);

Signature:

fromtoが文字列の範囲外だと java.lang.StringIndexOutOfBoundsException が発生する。

java.lang.String だけでなく java.lang.StringBuilderjava.lang.StringBuffer でも同様に使える。

java.lang.String#substring | Java Platform SE 8 Javadoc
http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#substring-int-

PHP

substr関数を使う。

// $str の $start 以降の部分文字列
substr($str, $start);

// $str の $start 以降の最大で$len文字の部分文字列
substr($str, $start, $len)

substr関数は文字列のつもりで間違って数値が入ってしまっても文字列に勝手に変換してくれるみたい。

var_export(substr("123", 1, 1)); // => '2'
var_export(substr(123, 1, 1)); // => '2'

substr 関数 | PHP Manual
http://php.net/manual/ja/function.substr.php

start が負の場合、返される文字列は、 stringの後ろから数えて start番目から始まる文字列となります。
string の長さが start 文字以下の場合は FALSE が返されます。
length が指定され、かつ負である場合、 string の終端から多くの文字が省略されます (start が負の場合は、開始位置を算出したあとで)。 もし start が切り出し位置を超える場合、 false が返されます。
length が指定され、かつ 0 である場合は、 空文字列なら NULL、そうでなければ FALSE を返します。
length を省略した場合は、 start の位置から文字列の最後までの部分文字列を返します。

$len$strに比べ長すぎる場合は、エラーにならずに$strの最後までを返す。

Python

スライスを使う。

a = "abcdef"
s = 2
e = 4

print(a[s:e])
# => cd

# 最後の文字だけを削除した文字列を取得
print(a[0:-1])
# => abcde

# 2文字目以降を取得
print(a[1:])
# => bcdef

Ruby

String#slice(index)
String#slice(from, length)

length を省略したら、from以降の文字列ではなく、その場所の1文字を返す。 slice メソッドの代わりに [] も同じ使い方ができる。

str = "あいうえお"

p str.slice(2, 3)
# => "うえお"
p str[2, 3]
# => "うえお"

slice[] を使った要素へのアクセスや範囲を指定してのアクセスは、 配列に対しても全く同じ使い方ができる。

Perl

use utf8;

my $s = "あいうえお";
print substr($s, 0, 3);
# => あいう
print substr($s, 2, 3);
# => うえお
print substr($s, 1);
# => いうえお

use utf8; がないと、バイト数で数えてしまって、 しか表示されない。

substr関数はとても変わっていて、左辺値として使えてしまうので、以下のように文字列の一部を変更するためにも使えてしまう。

use utf8;

my $s = "あいうえお";

substr($s, 2, 3) = "UEO";
print $s;
# => あいUEO

JavaScript

var newStr = str.substring(from);
var newStr = str.substring(from, to);
var newStr = str.substr(from);
var newStr = str.substr(from, len);

from, to, len に範囲外の数字を与えてもエラーになったりはしない。

lengthを省略したら、fromから最後までの部分文字列を返す。

substrではfromを負にすると、後ろから数えてくれる。substringにはこの機能がないみたい。

"abcdef".substr(-1)
// => "f"

CoffeeScript

str[from..to]

str = "abcdef"
a = 1
b = 3
console.log(str[a..b]) # => bcd
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク