プログラミング言語の文字列操作まとめ

プログラミング
プログラミングをしていると、文字列を結合したい、文字列を抽出したいということがありますが、「どう記述するんだっけ」といつも調べている方はいないでしょうか。
各言語が提供しているメソッドや関数をすべて覚える必要はなく、必要になったときに調べれば良いと思います。
そのような時に役に立てることを目指して、本ブログでは、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
文字列と数値の比較はできない。
==は、各言語で利用できますが、特に文字列の比較で使う際は、仕様が各言語で異なるので、注意が必要です。

文字列操作はプログラミングで必須の操作

多くの開発業務において、文字列操作は必ずと言ってよいほど出てきます。
そして、様々な方法が提供されているため、同じ結果を得られる様々な記述方法があります。
ある程度プログラミングに慣れてくると、独自のメソッドを作ったり、奇抜な記述方法を行いたくなるときがあるかもしれません。
ですが、プログラムは他人に読んでもらうために、分かりやすく、シンプルに記述することが重要です。
なるべく他の言語と同様の記述をしたり、言語が提供しているシンプルな記述方法を心がけることをおすすめします。
今回はプログラミング言語による文字列操作のまとめをしてみました。
各言語の詳細は、下記の関連記事をご参照ください。
参考になれば幸いです。

関連記事

コメント

タイトルとURLをコピーしました