文字列の連結をするには (strcat / +
/ .
)
2015/04/07
+
または .
という演算子でできる言語が多い。
Go言語 | Java | Scala | PHP | Python | Ruby | Perl | JavaScript | Haskell |
+ |
+ |
+ |
. |
+ |
+ |
. |
+ |
++ |
+
に数値を与えればほとんどの言語で加算演算子になる。
関連
C言語 2013/08/06
strcpy
や strcat
関数などを使う。
文字列リテラルを並べて書くと、プリプロセッサによって連結される。
"abc" "def"
Go言語 (golang) 2015/02/14
+
演算子で連結できる。
"abc" + "def"
文字列リテラルを演算子を挟まずに並べると、C言語のように連結されることはなく、コンパイルエラーになる。
Java 2015/02/14
+
演算子で連結できる。
"abc" + "def"
静的な文字列同士の連結はコンパイル時に連結される。
文字列リテラルを演算子を挟まずに並べると、C言語のように連結されることはなく、コンパイルエラーになる。
Scala 2015/02/14
Javaと同様に +
演算子で連結できる。
"abc" + "def"
静的な文字列同士の連結はコンパイル時に連結される。
文字列リテラルを演算子を挟まずに並べると、C言語のように連結されることはなく、コンパイルエラーになる。
+
の前に改行を入れてしまうと、セミコロンが省略されたものとみなされて、コンパイルエラーになるかもしれない。コンパイルエラーにはならずに、でも意図した動作にはならない場合もある。
# 以下はコンパイルエラーになる
val str = "abc"
+ "def";
# 以下はコンパイルエラーにならないが意図とは違うかもしれない
def f(): Int = 10;
val str = "abc"
+ f();
println(str);
# ここでは abc と表示され、abc10 にはならずにf()の返り値は無視される
Groovy 2014/10/25
JavaやScalaと同様に +
演算子で連結できる。
"abc" + "def"
文字列リテラルを演算子を挟まずに並べると、C言語のように連結されることはなく、コンパイルエラーになる。
Scalaと同様に +
の前に改行を入れてしまうと、セミコロンが省略されたものとみなされて、コンパイルエラーになるかもしれない。コンパイルエラーにはならずに、でも意図した動作にはならない場合もある。行末に \
を置くと、セミコロンの補完が抑制されて、コンパイルエラーにはならない。
# 以下はコンパイルエラーになる
str = "abc"
+ "def"
# 以下は問題なく "abcdef" になる。
str = "abc" \
+ "def"
# 以下はコンパイルエラーにならないが意図とは違うかもしれない
def f() { 10 }
str = "abc"
+ f()
println str
# ここでは abc と表示され、abc10 にはならずにf()の返り値は無視される
PHP 2015/04/07
.
演算子で連結できる。
'abc' . 'def'
文字列演算子 | PHP Manual
http://php.net/manual/ja/language.operators.string.php
Smarty 2015/04/07
cat
修飾子でできる。
{$foo|cat:$bar}
片方が変数でなくてリテラルの場合
{$foo|cat:'bar'}
Python 2015/04/07
+
演算子で連結できる。
'abc' + 'def'
文字列と数字の間で暗黙の型変換をすることはなく、そのまま連結することはできないので、
str
関数などを使う。
print(12 + "42")
# => エラー
print(str(12) + "42")
# => 1242
print(12 + int("42"))
# => 54
文字列リテラルを並べて書くと演算子を書かなくても連結される。改行を挟んでもよい。
"abc"
"def"
この2行の文字列は下の3つすべてと同じである。
"abcdef"
"abc" "def"
"abc" 'def'
以下のコードはぱっと見に反して2箇所が連結されて4つの要素のリストになる。この類はわかりづらいバグの元になるので要注意。
["1", "22", "333"
"4444," "55555", "666666"]
この種の連結は文字列リテラルの書き方('...'
, "..."
, """..."""
など)が混在していてもいいので、以下のように三重引用符("""
)で文字列を書きつつ、中に三重引用符自体を含めたいときは、そこだけ別の文字列リテラルで書く、ということもできる。
print("""/"/""/""" '"""' """/""")
# => /"/""/"""/
文字列リテラル同士の連結は +
演算子を使っても使わなくても実行時ではなくコンパイル時に連結されるらしい。
二項算術演算 | Python 2.7 documentation
http://docs.python.jp/2/reference/expressions.html#binary-arithmetic-operation
二項算術演算 | Python 3 documentation
http://docs.python.jp/2/reference/expressions.html#binary-arithmetic-operations
Ruby / JRuby 2015/04/07
+
演算子で連結できる。
'abc' + 'def'
+
演算子は非破壊的だが、concat
メソッドは破壊的に文字列を連結する。
str = 'abc'
str.concat('def')
puts str
# => abcdef
concat
の代わりに <<
でも同じで破壊的に文字列を連結する。
str = 'abc'
str << 'def'
puts str
# => abcdef
String#+
メソッド | Ruby 2.2 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.2.0/method/String/i/=2b.html
String#<<
メソッド, String#concat
メソッド | Ruby 2.2 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.2.0/method/String/i/=3c=3c.html
Perl 2014/08/08
例
'abc' . 'def'
複合代入演算子もある。
$str .= 'def';
Haskell 2014/05/19
文字列は文字のリストなので、リストの連結の演算子を使う。
例
> "abc" ++ "def"
"abcdef"
JavaScript 2013/08/13
例
"abc" + "def"