心の旅 blog

心だけでも旅に出れる

【いろんな言語で書いてみた】文字列内に出現するすべての空白文字を”%20”で置き換える関数

今回は、与えられた文字列に空白があった場合は、その空白部分を「%20」に置換する関数を作成する。 与えられた文字列の中で、特定の文字を置換する処理はよくあることだと思うが、じっさいに自分で書いてみるとどうなるのだろうか。

PHP

PHPだと文字列の長さを取得して、for文で1文字ずつ取得その1文字が空白がどうか調査する。

<?php

function replaceSpaces($str)
{
  $length = mb_strlen($str, "UTF-8");
  $rs = "";
  for($i=0; $i<$length; $i++) {
    $val = mb_substr($str, $i, 1, "UTF-8");
    if($val == " ") {
      $rs .= "%20";
    } else {
      $rs .= $val;
    }
  }
  return $rs;
}

$str = "a b cd e";
var_dump(replaceSpaces($str));

JavaScript

  • JSの場合だと、splitで配列にできるので、その配列を長さ分for文で回し、空白判定する。
function replaceSpaces(str) {

  var strs = str.split("");

  var i, rs="";
  for(i=0; i<strs.length; i++) {
    if(strs[i] == " ") {
      rs += "%20";
    } else {
      rs += strs[i];
    }
  }

  return rs;
}


var str = "a b cd e"
console.log(replaceSpaces(str));

Ruby

# coding: utf-8

def replace_spaces(str)
  rs = ""
  str.chars { |s|
    if s == " " then
      rs += "%20"
    else
      rs += s
    end
  }
  return rs
end

str = "a b cde "
puts replace_spaces(str)

Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def replace_spaces(str):
  rs = ""
  for num in range(len(str)):
    if str[num] == " ":
      rs += "%20"
    else:
      rs += str[num]

  return rs

if __name__ == "__main__":
  str = "ab c d e "
  print replace_spaces(str)

Go

ackage main

import "fmt"

func replaceSpaces(str string) string {
>-var rs string = ""
>-for _, s := range str {
>->-if (string(s)) == " " {
>->->-rs += "%20"
>->-} else {
>->->-rs += string(s)
>->-}
>-}
>-return rs
}

func main() {
>-var str string = "a b c d e f"
>-fmt.Println(replaceSpaces(str))
}

Elixir

#
# 文字列の中にスペースがあれば、「%20」に置き換える
#

defmodule ReplaceSpaces do

  def main(str) do
    length = String.length(str)
    replace(str, 0, length, [])
  end

  defp replace(str, count, length, replace_strs) do
    if count < length do
      val = String.at(str, count)
      if val == " " do
        val = "%20"
      end
      replace(str, count+1, length, [replace_strs|val])
    else
      replace_strs
    end
  end
end


str = "a  bcd ef g "
IO.puts String.length(str)
IO.puts str
IO.puts ReplaceSpaces.main(str)