平成の最後に色々なプログラミング言語で平成から令和に置換してみる

はじめに

もうすぐで平成も終わり、新しい時代「令和」が始まります。

そんな中、和暦を表示しているようなプログラムで平成から令和に変更する対応が間に合わないといった話題も出ています。
幸運なことに、私の仕事においてはそのような対応は不要でしたので、特に大変な思いはしていません。

それじゃあつまらない!ということで、色々なプログラミング言語で平成から令和に置換してみることにしました。(唐突)

replace 平成 with 令和

以下のような文章を、

年号は平成です

令和に対応させるために、文字列置換します

年号は令和です

基本的に、年号は平成です という文字列を message などの変数として持ち、 平成 という文字列を 令和 に置換し、結果を標準出力する、という流れになっています。

以降のコードはpaiza.IOにて動くことを確認していますが、その言語において一般的な記述であるかは保証できません。

paiza.io

Bash

GNU bash 4.4.19

MESSAGE="年号は平成です"
MESSAGE=`echo $MESSAGE | sed s/平成/令和/`
echo $MESSAGE

C#

mono-4.6.2 (C#6, CLI4.5)

public class Heisei2Reiwa{
    public static void Main(){
        string message = "年号は平成です";
        message = message.Replace("平成", "令和");
        System.Console.WriteLine(message);
    }
}

C++

clang 6.0 / LLVM 6.0 / libc++ (C++17)

#include <iostream>
using namespace std;
int main(void){
    std::string message = "年号は平成です";
    std::string heisei = "平成";
    std::string reiwa = "令和";
    message.replace(message.find(heisei), heisei.length(), reiwa);
    std::cout << message << std::endl;
}

D

LLVM D compiler 1.12.0

import std.stdio;
import std.string;
void main(){
  string message = "年号は平成です";
  message = replace(message, "平成", "令和");
  writeln(message);
}

Elixir

Elixir 1.5.3

message = "年号は平成です"
message = String.replace message, "平成", "令和"
IO.puts message

Go

go 1.11.1

package main
import (
    "fmt"
    "strings"
)
func main(){
    message := "年号は平成です"
    message = strings.Replace(message, "平成", "令和", 1)
    fmt.Println(message)
}

Java

openjdk 11.0.1

import java.util.*;
public class Main {
    public static void main(String[] args) throws Exception {
        String message = "年号は平成です";
        message = message.replace("平成", "令和");
        System.out.println(message);
    }
}

JavaScript

node v10.13.0

let message = '年号は平成です';
message = message.replace('平成', '令和');
console.log(message);

Kotlin

Kotlin 1.3.0

fun main(args: Array<String>) {
    var message = "年号は平成です"
    message = message.replace("平成", "令和")
    println(message)
}

MySQL

MySQL 5.7.24

set @message = '年号は平成です';
select replace(@message, '平成', '令和') from dual;

Perl

perl 5.26.1

$message = "年号は平成です";
$message =~ s/平成/令和/;
printf $message;

PHP

php 7.2.12

<?php
$message = '年号は平成です';
$message = str_replace('平成', '令和', $message);
print($message);

Python3

python 3.6.6

message = "年号は平成です"
message = message.replace("平成", "令和")
print(message)

R

R 3.4.4

message <- "年号は平成です"
message <- sub("平成", "令和", message)
cat(message)

Ruby

ruby 2.5.3

message = '年号は平成です'
message.sub!('平成', '令和')
puts message

Rust

Rust 1.28.0

fn main(){
    let message = "年号は平成です";
    let message = message.replace("平成", "令和");
    println!("{}", message);
}

Scala

Scala 2.12.7

object Main extends App{
    var message = "年号は平成です"
    message = message.replace("平成", "令和")
    println(message)
}

Swift

Swift version 4.2

import Foundation
var message = "年号は平成です"
message = message.replacingOccurrences(of: "平成", with: "令和")
print(message)

VB

VB.net 0.0.0.5943 / mono-4.6.2

public class Heisei2Reiwa
  shared function Main as integer
    Dim message = "年号は平成です"
    message = message.Replace("平成", "令和")
    Console.WriteLine(message)
    return 0
  End function
end class

おわりに

以上なんですけどね...

感想としては、 replace などの関数(メソッド)が標準的に用意されていればとても簡単ですが、用意されていないと文字列操作をすることになり面倒だなということです。
プログラミング言語の開発者様に感謝です。

また、環境を整えなくてもコードを実行できるオンライン実行環境は大変ありがたい存在だなと感じました。
paiza.IOは主要な言語があり、バージョンも新しめで、簡単に使えるので、とても良かったです。
(関係者では全くありません)

本当はもっとたくさんの言語についてやりたかったのですが、難しいですね。