【いろんな言語で書いてみた】文字列内に出現するすべての空白文字を”%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)