文字列の連結
数と文字を並べたいのに、足し算されてしまう
System.out.println に値を 1 つずつ渡していては、1 行の文になりません。名前と年齢を並べて「田中さん (25 歳)」と出したいときは、+ で 1 本の文字列につなぎます。
Java
String name = "田中";
int age = 25;
System.out.println(name + "さん (" + age + " 歳)");
// 田中さん (25 歳)Java の + は、左右がどちらも数値なら足し算、片方でも String があれば連結、という二面性を持っています。だから age を文字列に直す手続きは要りません。int でも double でも boolean でも、String の隣に置けば勝手に文字列になって並びます。
Java
System.out.println("在庫あり " + true + " 単価 " + 98.5);
// 在庫あり true 単価 98.5+ は左から順に効いていく
同じ材料でも、並べる順番で結果が変わります。
Java
System.out.println(1 + 2 + "円"); // 3円
System.out.println("合計 " + 1 + 2); // 合計 12上は先に 1 + 2 が数の足し算になり、そのあと "円" と連結されます。下は先頭が String なので、そこから右はすべて連結になり、1 と 2 が並んで 12 になってしまいます。
変数でも同じことが起きます。a が 1、b が 2 のとき、"合計 " + a + b は 合計 3 ではなく 合計 12 です。数の計算をしてから連結したいときは、計算のほうを括弧で囲みます。"合計 " + (a + b) と書けば 合計 3 になります。
null をつなぐと「null」の 4 文字が出る
値が入っていない String をそのまま連結しても、Java はエラーを出しません。かわりに null という文字を混ぜて表示します。
Java
String nickname = null;
System.out.println("ようこそ、" + nickname + "さん");
// ようこそ、nullさん画面に出るまで気づけないのが、この手のバグの厄介なところです。落ちてくれないので、テストが通らないときは期待した文字列と実際の出力を 1 文字ずつ見比べることになります。
出力を組み立てたら、記号のまわりの半角スペースを最後に指で数えます。区切り記号の後ろにスペースを 1 つ入れるかどうかで、見た目もテストの結果も変わります。
要件
- クラス名は
Solution、メソッド名はformatPrice、引数はString item, int priceの 2 つ、戻り値の型はStringにすること - 出力フォーマットは
"商品名: " + item + ", 価格: " + price + "円"の形 (:の後ろは半角スペース 1 個、,の後ろも半角スペース 1 個、円の前にはスペースなし) +演算子による文字列連結を使い、String.formatやStringBuilderは使わないこと
入出力例
formatPrice("ペン", 100) → "商品名: ペン, 価格: 100円"
formatPrice("ノート", 350) → "商品名: ノート, 価格: 350円"
formatPrice("ティッシュ", 200) → "商品名: ティッシュ, 価格: 200円"
formatPrice("サンプル", 0) → "商品名: サンプル, 価格: 0円"ヒント
編集 ゆめさく編集部