文字列に関するコマンドの違い
文字列に関するpythonとrubyコマンドをまとめてみたが、文字列操作はややこしく、表では表しきれていない部分も多い。
| python | ruby 1.8 and 1.9
|
| s="2010's" | s="2010's" or %Q(2010's)
|
| s='"2010"' | s=%Q'"2010"'
|
| s=r'c:\user' | s='c:\user' or %q(c:\user)
|
| s=u'\u9300' | s="\u9300"(1.9)
|
| s=u'\U00028b46' | s="\u{028b46}"(1.9)
|
| s="%dK,%fPa"%(273,1024) | s="%dK,%fPa"%[273,1024]
|
| s="""first | s="first
|
| second"""" | second"
|
| s[2] | s[2,1] or s[2].chr(1.8) and s[2](1.9)
|
| s[1:3] | s[1...3] or slice(1...3)
|
| len(s) | s.size or s.length
|
| int("1") | "1".to_i
|
| float("3.14") | "3.14".to_f
|
| s.count('0') | s.count('0')
|
| s.capitalize() | s.capitalize
|
| s.swapcase() | s.swapcase
|
| s.upper() | s.upcase
|
| s.lower() | s.downcase
|
| s.center(10) | s.center(10)
|
| s.ljust(10) | s.ljust(10)
|
| s.rjust(10) | s.rjust(10)
|
| s.strip() | s.strip
|
| s.lstrip() | s.lstrip
|
| s.rstrip() | s.rstrip
|
| s.find('1') | s.index('1')
|
| s.rfind('1') | s.rindex('1')
|
| s.split(',') | s.split(/,/)
|
| ",".join(["a","b"]) | ["a","b"].join(",")
|
| s.replace('a','A') | s.gsub!(/a/){'A'}
|
| s.replace('a','A',1) | s.sub!(/a/){'A'}
|
pythonでは、シングルクォートとダブルクォートの違いはほとんど無いが、rubyではダブルクォートではバックスラッシュ記法や文字列展開を行うという大きな違いがある。pythonのraw文字列は便利であるが、rubyではシングルクォートに対応するのだろう。しかし、いずれも最後の文字がバックスラッシュだとうまく動かない。pythonのトリプルクォートは、rubyのhere documentに対応するのかも知れないが、rubyのダブルクォートでも改行ができる。rubyのユニコード対応は実質1.9からのようだ。ちなみに、上の例はある元素の中国語です。また、文字列をindexで指定して取り出す場合には、ruby1.8とruby1.9でまったく動作が異なる。1.8は数値になるのでCと同じ感じで、1.9では文字なのでpythonと同じと言えるのだろう。それから、pythonはバッククォートが無いようだ。