はじめに
これは 😺TECHSCORE Advent Calendar 2019😺 の 20 日目の記事です。
こんにちは。桂川です。社会人として働き始めて約 9 カ月が経過しました。これまでに複数のプログラミング言語に触れる機会がありました。未経験のプログラミング言語に触れるとしても、基本的な記述方法は勘でわかることが多いです。しかし、やはりプログラミング言語ごとに相違点があるため、 Web などを駆使して調べつつコーディングをしています。
本ブログでは 2012 年 11 月 28 日に公開された「あえて言うほどではない 数値 ⇔ 文字列変換 Java編」という記事があります。この記事では、コーディングをしているときに頻繁に記述するであろう“文字列 ⇔ 数値”の変換について、Java における記述方法を紹介しています。個人的にも Java で“文字列 ⇔ 数値変換”を実装するとき、何度も見てしまう、お世話になっているページです。(ぜひ、みなさまもご覧ください!)
複数のプログラミング言語に触れる機会があった自分としては、Java だけではなく他のプログラミング言語ではどのように記述できるのか、どのような相違点があるのかを把握したいと思いました。このようなモチベーションで、本記事では複数のプログラミング言語における記述について紹介します。この記事が、さまざまなプログラミング言語に触れる方々にとってのコードスニペットのような役目を果たすことができたなら幸いです。
あえて言うほどではない 数値 ⇔ 文字列変換
プログラミング言語
本記事で対象とするプログラミング言語は、ソフトウェア開発のプラットフォームである GitHub が発表した年次レポート Octoverse より、“2019 年人気プログラミング言語トップ 10”( Octoverse における Top languages )とします[1]。
2019 年人気プログラミング言語トップ 10
- JavaScript
- Python
- Java
- PHP
- C#
- C++
- TypeScript
- Shell
- C
- Ruby
以下、各プログラミング言語における数値 ⇔ 文字列変換を実現するコードを紹介します。
※今回、扱う数値は整数型に限定します。また、変換方法については抜粋しており、すべてを網羅しているわけではございません。以上について、あらかじめご了承くださいませ。
JavaScript
JavaScript はインタラクティブな Web サイトの構築、ゲームの制作にも使用される主要な言語です。変数の型をコンパイルや実行より前に決めないという、動的型付けの言語です。JavaScript における数値 ⇔ 文字列変換は以下のように記述できます。JavaScript の実行環境である Node.js のバージョンは 12.13.1 を使用しました。
1 2 |
$ node -v 12.13.1 |
数値 ⇒ 文字列
String
オブジェクトを使用して数値を文字列に変換する例。
1 2 |
var i = 2019; var s = String(i); |
Number
クラスの toString
メソッドを使用して数値を文字列に変換する例。
1 2 |
var i = 2019; var s = i.toString(); |
空白の文字列を足して数値を文字列に変換する例。
1 2 |
var i = 2019; var s = i + ''; |
${}
を使用して数値を文字列に変換する例。
1 2 |
var i = 2019; var s = `${i}`; |
文字列 ⇒ 数値
Number
オブジェクトを使用して文字列を数値に変換する例。
1 2 |
var s = '2019'; var i = Number(s); |
parseInt
オブジェクトを使用して文字列を数値に変換する例。
1 2 3 4 |
var s = '2019'; var i = parseInt(s); // もしくは var i = parseInt(s, 10); |
四則演算によって文字列を数値に変換する例。
1 2 3 4 5 |
var s = '2019'; var i = s - 0; // もしくは var i = s * 1; var i = s / 1; |
Python
Python はさまざまな用途で使用されます。特に近年では人工知能を使用したアプリケーションの開発やデータサイエンスの分野で使用される言語として注目されています。動的型付けの言語です。また、プログラミング初学者にとって学習しやすい言語としても認知されています。Python における数値 ⇔ 文字列変換は以下のように記述できます。使用したバージョンは 3.6.8 です。
1 2 3 |
$ python --version 3.6.8 (default, Oct 7 2019, 12:59:55) [GCC 8.3.0] |
数値 ⇒ 文字列
組み込み関数 str
を使用して数値を文字列に変換する例。
1 2 |
i = 2019 s = str(i) |
文字列 ⇒ 数値
組み込み関数 int
を使用して文字列を数値に変換する例。
1 2 |
s = '2019' i = int(s) |
そして、unicodedata
モジュールで定義されている関数 unicodedata.numeric()
を使用することにより、一、十、百、千といった漢数字 1 つの数値への変換が可能です。これはシブいですね。
1 2 3 4 |
import unicodedata s = '百' i = unicodedata.numeric(s) |
Java
Java はオブジェクト指向に基づいた言語です。モバイルおよび Web アプリケーション、ゲーム、データベース駆動型ソフトウェアの開発などに使用されます。変数の型をコンパイルや実行より前にあらかじめ決めるという、静的型付けの言語です。Java における数値 ⇔ 文字列変換は以下のように記述できます。使用したバージョンは 1.8.0_202 です。
1 2 3 4 |
$ java -version java version "1.8.0_202" Java(TM) SE Runtime Environment (build 1.8.0_202-b08) Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode) |
数値 ⇒ 文字列
String
クラスの valueOf
メソッドを使用して数値を文字列に変換する例。
1 2 |
int i = 2019; String s = String.valueOf(i); |
空の文字列に足すことにより数値を文字列に変換する例。
1 2 |
int i = 2019; String s = "" + i; |
Integer
クラスのインスタンスを生成して、toString()
メソッドを使用して数値を文字列に変換する例。
1 2 |
int i = 2019; String s = new Integer(i).toString(); |
Integer
クラスの toString
メソッドを使用して数値を文字列に変換する例。
1 2 |
int i = 2019; String s = Integer.toString(i); |
文字列 ⇒ 数値
Integer
クラスの parseInt
メソッドを使用して文字列を数値に変換する例。
1 2 |
String s = '2019'; int i = Integer.parseInt(s); |
Integer
クラスのインスタンスを生成して、intValue()
メソッドを使用して文字列を数値に変換する例。
1 2 |
String s = '2019'; int i = new Integer(s).intValue(); |
Integer
クラスの valueOf
メソッドを使用して文字列を数値に変換する例。
1 2 |
String s = '2019'; int i = Integer.valueOf(s); |
PHP
PHP は Web 開発に適しており、HTML に埋め込みが可能な言語です。動的型付けの言語です。PHP における数値 ⇔ 文字列変換は以下のように記述できます。使用したバージョンは 7.2.26 です。
1 2 3 4 |
$ php -v PHP 7.2.26 (cli) (built: Dec 17 2019 14:06:22) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies |
数値 ⇒ 文字列
strval
関数を使用して数値を文字列に変換する例。
1 2 |
$i = 2019; $s = strval($i); |
sprintf
関数を使用して数値を文字列に変換する例。
1 2 |
$i = 2019; $s = sprintf("%d",$i); |
キャスト演算子を使用して数値を文字列に変換する例。
1 2 |
$i = 2019; $s = (string) $i; |
文字列 ⇒ 数値
intval
関数を使用して文字列を数値に変換する例。
1 2 |
$str = "2019"; $num10 = intval($str); |
キャスト演算子を使用して文字列を数値に変換する例。
1 2 |
$str = "2019"; $num = (int)$str; |
C#
C# は、C から派生した言語です。 Java と似た言語です。静的型付けの言語です。モバイルアプリ、ゲーム、エンタープライズソフトウェアの開発などに使用されます。C# における数値 ⇔ 文字列変換は以下のように記述できます。使用したコンパイラは mcs で、バージョンは 6.6.0.161 です。
1 2 |
$ mcs --version Mono C# compiler version 6.6.0.161 |
数値 ⇒ 文字列
ToString
メソッドを使用して数値を文字列に変換する例。
1 2 |
int i = 2019; string s = i.ToString(); |
Convert
クラスの ToString
メソッドを使用して数値を文字列に変換する例。Convert
クラスで変換する場合には、null
の変換を試みても例外が発生しません。
1 2 |
int i = 2019; string s = Convert.ToString(i); |
文字列 ⇒ 数値
int
クラスの Parse
メソッドを使用して文字列を数値に変換する例。
1 2 |
string s = "2019"; int i = int.Parse(s); |
Convert
クラスを使用して文字列を数値に変換する例。
1 2 |
string s = "2019"; int i = Convert.ToInt32(s); |
C++
C++ は C から派生した言語です。オペレーティングシステム、ブラウザ、ゲームなどにおける中核的な言語として、広く使用されています。静的型付けの言語です。C++ における数値 ⇔ 文字列変換は以下のように記述できます。対象としたバージョンは C++11 で、使用したコンパイラは g++ でバージョンが 4.8.5 です。
1 2 3 4 5 |
$ g++ --version g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
数値 ⇒ 文字列
to_string
関数を使用して数値を文字列に変換する例。
1 2 |
int i = 2019 std::string s = std::to_string(i); |
文字列 ⇒ 数値
stoi
関数を使用して文字列を数値に変換する例。
1 2 |
std::string s = "2019"; int i = std::stoi(s); |
TypeScript
TypeScript は、JavaScript において課題として考えられている点を補う目的で開発された言語です。JavaScript が動的型付けの言語であるのに対して、静的型付けの言語であるという特徴が挙げられます。これにより、意図していない型の値を変数に代入できないため、実行前に不具合の検出が可能であるというメリットがあります。TypeScript における数値 ⇔ 文字列変換は JavaScript の記述の使用が可能であるということで割愛させていただきます。
Shell
Shell はオペレーティングシステムの操作などに使用できる言語です。Bashなどで拡張された場合はともかく、Shell の変数にはデータ型が定義されておらず、一律で文字列型です。それゆえ、数値 ⇒ 文字列という処理は存在しません。ただし、四則演算など数値の計算が可能です。使用した Shell は Bash でバージョンは 4.4.20 です。
1 2 3 4 5 6 7 |
$ bash --version GNU bash, バージョン 4.2.46(2)-release (x86_64-redhat-linux-gnu) Copyright (C) 2011 Free Software Foundation, Inc. ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. |
文字列を数値として計算
計算を実施する場合は対象の部分を $()
で囲み、数値として展開する変数の直前に expr
を使用します。この時、四則演算記号の前後にスペースが必要です。※掛け算や括弧を使用する場合は \*
のように、記号の前にバックスラッシュ(Windows では円マーク)を記述してエスケープをする必要があります。
1 2 |
s=2019 s=$(expr $s + 1) # 文字列sは計算時のみ一時的に数値として扱われる |
C
C は、今回の対象としている Java、PHP、 JavaScript、C#、C++ といった多くの言語のルーツとされている言語です。静的型付けの言語です。C における数値 ⇔ 文字列変換は以下のように記述できます。対象としたバージョンは C11 で、使用したコンパイラは gccでバージョンが 4.8.5 です。
1 2 3 4 5 |
$ gcc --version gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
数値 ⇒ 文字列
sprintf
関数を使用して数値を文字列に変換する例。
1 2 3 |
int i = 2019; char s[256]; sprintf(s,"%d",i); |
文字列 ⇒ 数値
atoi
関数を使用して文字列を数値に変換する例。
1 2 |
char* s = "2019"; int i = atoi(s); |
他にも atol
、atoll
、atof
という関数もあり、これらを使用することで long 型、long long 型、float 型への変換が可能です。
Ruby
Ruby はまつもとゆきひろ氏により開発されたオブジェクト指向のスクリプト言語です。特徴として、シンプルさが挙げられます。動的型付けの言語です。Ruby における数値 ⇔ 文字列変換は以下のように記述できます。使用したバージョンは 2.0.0 です。
1 2 |
$ ruby --version ruby 2.0.0p648 (2015-12-16) [x86_64-linux] |
数値 ⇒ 文字列
to_s
メソッドを使用して数値を文字列に変換する例。
1 2 |
i = 2019 s = i.to_s |
文字列 ⇒ 数値
to_i
メソッドを使用して文字列を数値に変換する例。
1 2 |
s = "2019" i = s.to_i |
可読性が高いですね。
おわりに
“2019 年人気プログラミング言語トップ 10”を対象に、数値 ⇔ 文字列変換を実現するコードを紹介しました。類似している記述方法もあれば、そうでない記述方法もありましたね。これでどんなプログラミング言語を使うとしても、“数値 ⇔ 文字列変換”はバッチリです…