プログラミングをしていると、文字列を結合したい、文字列を抽出したいということがありますが、「どう記述するんだっけ」といつも調べている方はいないでしょうか。
各言語が提供しているメソッドや関数をすべて覚える必要はなく、必要になったときに調べれば良いと思います。
そのような時に役に立てることを目指して、本ブログでは、JavaScript、Python、Java、Ruby、Goの5つの言語の文字列操作についてまとめました。
そこで本記事では、5つの言語の文字列操作を比較し、言語間でどんな違いがあるのか、どんな注意点があるのかについてまとめました。
普段から複数言語を使われている方は、復習のために見ていただきたいと思います。
これから新たな言語を学習しようと考えている方は、知っている言語と比較することで、学習効率が上がりますので、お役に立てていただければと思います。
各言語の詳細は、記事下部の関連記事にまとめておきますので、必要に応じてご覧いただければと思います。
プログラミング言語の文字列操作まとめ
本ブログで採り上げた文字列操作は以下の13種類となります。
それぞれ各言語で比較しながらまとめます。
- 文字列を結合したい
- 文字列を抽出したい
- 文字列の長さを求めたい
- 文字列を検索したい
- 文字列を置換したい
- 文字列を削除したい
- 文字列を配列に分割したい
- 文字列をトリミングしたい
- 文字列をパディングしたい
- 文字列を大文字・小文字に変換したい
- 文字列を数値に変換したい
- 数値を文字列に変換したい
- 文字列が一致しているか確認したい
文字列を結合したい
言語 | 方法 | 注意点など |
---|---|---|
JavaScript | +演算子、concat、join、テンプレートリテラル | +演算子による結合は、文字列+数値であれば文字列に変換されるが、逆はできない。 |
Python | +演算子、join、printf形式、format、フォーマット済み文字列リテラル(f文字列) | +演算子による結合は、文字列と数値を結合することはできない。 formatとf文字列はpython2は使用できない。 |
Java | +演算子、concat、join、format、StringBuffer、StringBuilder | +演算子による結合は、文字列と数値はどんな順番でも文字列として結合される。 |
Ruby | +メソッド、<<メソッド、concat、join、式展開、sprintf | +メソッドによる結合は、文字列と数値を結合することはできない。 |
Go | +演算子、join、Sprintf、Builder | +演算子による結合は、文字列と数値を結合することはできない。 |
文字列の結合は、どの言語も多くの方法が提供されており、一番単純なのは+による結合です。
ただし、+による文字列と文字列以外の結合は、言語によりできなかったり、仕様が異なるため注意が必要となります。
joinによる配列から文字列への結合は、どの言語でも提供されており、使い方もほぼ同じです。
また、書式指定による文字列の埋め込みについても、どの言語でも提供されていて、非常に便利な機能です。
文字列を抽出したい
言語 | 方法 | 注意点など |
---|---|---|
JavaScript | slice、substr、substring | 抽出の最後を終了位置を指定するのか、文字数を指定するのかは、使用する関数によって異なる。 |
Python | 開始と終了のインデックスを指定 | インデックスにマイナス値を指定することも可能。 |
Java | substring | インデックスにマイナス値を指定することはできない。 |
Ruby | 開始と終了のインデックスを指定、slice、match | インデックスにマイナス値を指定することも可能。 |
Go | 開始と終了のインデックスを指定 | インデックスにマイナス値を指定することはできない。 |
文字列の抽出は、専用のメソッド・関数が用意されている言語と、変数に直接インデックスを指定して抽出する方法があります。
どちらも開始位置と終了位置を指定しますが、終了位置を抽出したい文字までとするか、その+1(文字数分)とするかが言語によって異なりますので注意が必要です。
文字列の長さを求めたい
言語 | 方法 | 注意点など |
---|---|---|
JavaScript | length | 文字数を返す。 |
Python | len | python2ではバイト数を返し、python3では文字数を返す。 |
Java | length、isEmpty | 文字数を返す。 |
Ruby | size、length、bytesize | size、lengthは文字数を返す。 |
Go | len、RuneCountInString | lenはバイト数を返す。 |
文字列の長さを取得する際に注意するのは、日本語などのマルチバイトが含まれる場合に、文字数を返すのか、バイト数を返すのかで結果が異なる点です。
ほとんどの言語で文字数を返すメソッド・関数が主流ですが、一部異なるものもあるので注意が必要です。
文字列を検索したい
言語 | 方法 | 注意点など |
---|---|---|
JavaScript | indexOf、search、match、RegExp | |
Python | find、count、in文、startswith、endswith | |
Java | contains、indexOf、matches、startsWith、endsWith | |
Ruby | index、include?、=~、count、start_with?、end_with? | |
Go | Contains、Index、Count、HasPrefix、HasSuffix |
文字列の検索は、各言語ともたくさんの方法が提供されています。
どのメソッド・関数を使ったら最善の結果となるかを見極める必要があるかと思います。
文字列を置換したい
言語 | 方法 | 注意点など |
---|---|---|
JavaScript | replace | |
Python | replace、translate | |
Java | replace、replaceAll、replaceFirst | |
Ruby | replace、sub、gsub、tr | |
Go | Replace、ReplaceAll、NewReplacer |
文字列の置換は、どの言語にもreplaceが提供されています。
また、正規表現を使う方法が提供されていて、置換回数を指定できたりするものもありますので、場面に応じて使い分けが必要となります。
文字列を削除したい
言語 | 方法 | 注意点など |
---|---|---|
JavaScript | replaceの置換後の文字列を空文字にする | |
Python | replace、translateの置換後の文字列を空文字にする | |
Java | replaceの置換後の文字列を空文字にする | |
Ruby | delete、slice! | |
Go | Replaceの置換後の文字列を空文字にする |
文字列の削除は、多くの言語が専用のメソッド・関数は用意されておらず、置換後の文字列を空文字にすることで、結果削除になる方法を提供しています。
Rubyだけは、専用のメソッドが用意されていたり、Rubyの特徴でもある破壊的操作をすることで文字列を変化させる方法を提供しています。
使い勝手の良い便利なメソッドをたくさん提供しているRubyならではの部分かと思います。
文字列を配列に分割したい
言語 | 方法 | 注意点など |
---|---|---|
JavaScript | split | 分割数を指定可能。 |
Python | split、rsplit | 分割数を指定可能。 |
Java | split | 分割数を指定可能。 |
Ruby | split | 分割数を指定可能。 |
Go | Split、SplitN | SplitNで分割数を指定可能 |
文字列を配列に分割するのは、どの言語もsplitが提供されています。
どの言語とも、分割する区切り文字の指定と、分割数(Goは専用メソッド)を指定可能です。
文字列をトリミングしたい
言語 | 方法 | 注意点など |
---|---|---|
JavaScript | trim、trimLeft、trimRight | |
Python | strip、lstrip、rstrip | |
Java | trim | |
Ruby | strip、chomp、chop | |
Go | Trim、TrimLeft、TrimRight、TrimPrefix、TrimSuffix、TrimSpace |
文字列のトリミングは、どの言語も提供されていますが、名前がtrim、stripで分かれるので注意が必要です。
できることは、どの言語とも大きくは変わりません。
文字列をパディングしたい
言語 | 方法 | 注意点など |
---|---|---|
JavaScript | padStart、padEnd | |
Python | zfill、ljust、center、rjust | |
Java | 文字列の書式指定 | 専用のメソッドなし。 |
Ruby | ljust、center、rjust | |
Go | 文字列の書式指定 | 専用の関数なし。 |
文字列のパディングは、専用のメソッド・関数を持つ言語と持たない言語に別れます。
どの言語でも書式指定によるパディングは可能なので、無理して専用のメソッド・関数を使うこともないのかもしれません。
文字列を大文字・小文字に変換したい
言語 | 方法 | 注意点など |
---|---|---|
JavaScript | toUpperCase、toLowerCase | |
Python | upper、lower | |
Java | toUpperCase、toLowerCase | |
Ruby | upcase、downcase、swapcase、capitalize、title | |
Go | ToUpper、ToLower、Title |
文字列の大文字・小文字変換は、どの言語でもすべて大文字、すべて小文字に変換する機能が提供されています。
言語によっては、キャピタライズ(最初の単語の先頭を大文字にする)、タイトルケース(各単語の先頭を大文字にする)など特殊な変換が可能な言語もあります。
文字列を数値に変換したい
言語 | 方法 | 注意点など |
---|---|---|
JavaScript | parseInt、Number | |
Python | int | |
Java | parseInt、valueOf | |
Ruby | to_i | |
Go | Atoi |
文字列から数値への変換は、記述方法が各言語で異なります。
数値を文字列に変換したい
言語 | 方法 | 注意点など |
---|---|---|
JavaScript | toString、String | |
Python | str | |
Java | valueOf | |
Ruby | to_i | |
Go | Itoa |
数値から文字列への変換も、記述方法が各言語で異なります。
文字列が一致しているか確認したい
言語 | 方法 | 注意点など |
---|---|---|
JavaScript | ==(等価演算子)、===(同値演算子) | 文字列と数値の比較で==は文字列として一致していれば同値とみなす。===は型が異なるため同値とならない。 |
Python | == | 文字列と数値の比較はできない。 |
Java | eqauls、eqaulsIgnoreCase、comparaTo | 文字列と数値の比較はできない。 |
Ruby | eql?、==、===、casecmp? | 文字列と数値の比較はできるが、常にfalseが返される。 |
Go | ==、EqualFold、Compare | 文字列と数値の比較はできない。 |
==は、各言語で利用できますが、特に文字列の比較で使う際は、仕様が各言語で異なるので、注意が必要です。
文字列操作はプログラミングで必須の操作
多くの開発業務において、文字列操作は必ずと言ってよいほど出てきます。
そして、様々な方法が提供されているため、同じ結果を得られる様々な記述方法があります。
ある程度プログラミングに慣れてくると、独自のメソッドを作ったり、奇抜な記述方法を行いたくなるときがあるかもしれません。
ですが、プログラムは他人に読んでもらうために、分かりやすく、シンプルに記述することが重要です。
なるべく他の言語と同様の記述をしたり、言語が提供しているシンプルな記述方法を心がけることをおすすめします。
今回はプログラミング言語による文字列操作のまとめをしてみました。
各言語の詳細は、下記の関連記事をご参照ください。
参考になれば幸いです。
コメント