特定のインデックスの文字を取得するには (charAt / getAt) 2014/01/26
インデックスを指定してその場所の1文字を取得する方法。文字列と文字(char)が別のデータ型の言語の場合は、文字(char)として取得できる。文字(char)のデータ型が存在しない言語の場合は、1文字の文字列として取得するできる。
インデックスで範囲を指定して部分文字列を取得する方法はsubstr参照。
Java 2015/02/15
0から始まるインデックスで char
の文字を取得できる。
char
はUTF-16の16ビットでの値なので、サロゲートペアの文字が含まれていた場合、インデックスが文字単位のインデックスとは一致しないし、サロゲートペアの文字に直撃した場合はその1バイト目または2バイト目のみの取得になってしまう。
Signature:
java.lang.String
だけでなく java.lang.StringBuilder
や java.lang.StringBuffer
でも同様に使える。
文字列(java.lang.String
)はイミュータブルなので、文字を取得できるのみで、書き換えることはできない。
Scala 2015/02/15
Javaと同じく、0から始まるインデックスで Char
の文字を取得できる。
char
はUTF-16の16ビットでの値なので、サロゲートペアの文字が含まれていた場合、インデックスが文字単位のインデックスとは一致しないし、サロゲートペアの文字に直撃した場合はその1バイト目または2バイト目のみの取得になってしまう。
Signature:
apply
メソッドが定義されているので、str(2)
のように配列の要素へのアクセスと同じように文字を取得できる。
StringLike#apply
は内部ではJavaの String#charAt
を呼び出している。
例
"abc"(2) // => 'c'
文字列(java.lang.String
)はイミュータブルなので、文字を取得できるのみで、書き換えることはできない。
Groovy 2014/11/19
Javaと同じく、0から始まるインデックスで Char
の文字を取得できる。
char
はUTF-16の16ビットでの値なので、サロゲートペアの文字が含まれていた場合、インデックスが文字単位のインデックスとは一致しないし、サロゲートペアの文字に直撃した場合はその1バイト目または2バイト目のみの取得になってしまう。
Signature:
// java.lang.String
char charAt(int index)
String getAt(int index)
JavaにはないメソッドとしてgetAt
メソッドが定義されており、
Groovyの演算子オーバーロードにより str[2]
のように配列の要素へのアクセスと同じように文字を取得できる。
getAt
では負を指定すると、後ろから数えてくれる。
charAt
もgetAt
も範囲外のインデックスを指定すると
java.lang.StringIndexOutOfBoundsException
がスローされる。妥当な範囲は charAt
では 0
から str.length - 1
まで、
getAt
では -str.length
から str.length - 1
までである。
java.lang.String#getAt
| Groovy JDK API Documentation
http://beta.groovy-lang.org/docs/latest/html/groovy-jdk/java/lang/String.html#getAt(int)
PHP 2015/10/19
[]
演算子で0から始まるインデックスで文字を取得できる。
$str[$index];
PHP文字というデータ型はないので、取得した結果も1文字ではあるものの文字列である。従って以下のようなことになる。
$str = "abc";
echo $str[0]; // => a
echo $str[0][0]; // => a
echo $str[0][0][0]; // => a
ただしこれはPHP 5.4以降の話で、
PHP 5.3までだとなぜか $str[0][0]
からはエラーになる。
$str[0]
が文字列なのは同じなので、なぜだろう?
PHP 5.4までは文字列リテラルに直接 []
でアクセスすることができない。
echo "abc"[1];
このコードをPHP 5.4以前で実行すると PHP Parse error: syntax error, unexpected '['
というエラーになる。
Javaなどと同様の感覚で文字を文字コードの数値として取得するには
ord($str[$index])
のようにord
を使う。ただし、これは文字コードに関係なくバイト単位になるので、仮名や漢字などのマルチバイト文字の場合には取り扱いに注意が必要。
Python 2015/02/15
文字列の中の文字は、リストやタプルから要素を取得するのと同じように []
でアクセスできる。
str[index]
文字というデータ型はないので、取得した結果も文字列である。
文字列はイミュータブルなので、文字を書き換えることはできない。
文字列の中の最後の文字を取得する例
str[-1]
Ruby 2015/02/15
文字列の中の文字は、配列から要素を取得するのと同じように []
でアクセスできる。
文字というデータ型はないので、取得した結果も文字列である。
str = "abcあいう"
p str[0] # => "a"
p str[4] # => "い"
p str[4].class # => String
文字を書き換えることもできる。しかも1文字を2文字以上に置き換えることもできる。
str = "abcあいう"
str[4] = "II"
p str # => abcあIIう
Perl 2014/08/22
use utf8;
my $s = "あいうえお";
print substr($s, 2, 1);
# => う
use utf8;
がないと、ASCII以外の文字を正しく扱えない。
文字というデータ型はないので、取得した結果も文字列である。その文字のコードを整数で取得したい場合は ord
を使う。
JavaScript 2014/12/08
例
str[index]
インデックスは0から始まる。
範囲外のインデックスを指定すると undefined
が返される。
charCodeAt
というメソッドだと文字をコードポイントで取得できる。ただし、サロゲートペアには対応していない。
CoffeeScript 2013/09/07
例
str[index]
インデックスは0から始まる。