41

どのようにJavaで文字を連結しますか? +文字列を連結するには、文字列間にa のみが必要ですが、を使用して文字を連結+すると、文字の値が ascii に変更されるため、数値出力が得られます。System.out.println(char1+char2+char3...このような文字列の単語を作成して作成したいと思います。

私はそれをできた

System.out.print(char1);
System.out.print(char2);
System.out.print(char3);

しかし、これは1行の文字しか取得できません。文字列として必要です。どんな助けでも大歓迎です。

ありがとう

4

12 に答える 12

62

それらから文字列を作成しますか?

String s = new StringBuilder().append(char1).append(char2).append(char3).toString();

ご了承ください

String b = "b";
String s = "a" + b + "c";

実際にコンパイルすると

String s = new StringBuilder("a").append(b).append("c").toString();

編集:litbが指摘したように、これを行うこともできます:

"" + char1 + char2 + char3;

これは次のようにコンパイルされます。

new StringBuilder().append("").append(c).append(c1).append(c2).toString();

編集 (2) : cletus が指摘するように、一連の文字列がコンパイラによって処理されるため、文字列追加比較を修正しました。

上記の目的は、コンパイラが何をするかを説明することであり、何をすべきかを伝えることではありません。

于 2008-11-30T00:28:46.703 に答える
25

私はこの質問に答えるつもりはありませんでしたが、ここには 2 つの回答 (投票されています!) があり、それらはまったく間違っています。次の式を検討してください。

String a = "a" + "b" + "c";
String b = System.getProperty("blah") + "b";

最初のものはコンパイル時に評価されます。2 番目は実行時に評価されます。

そのため、定数連結 (任意の型) を StringBuilder や StringBuffer などに置き換えないでください変数が関与する場合にのみ使用し、通常は多くのオペランドを追加する場合、またはループで追加する場合にのみ使用してください。

文字が一定の場合、これで問題ありません。

String s = "" + 'a' + 'b' + 'c';

ただし、そうでない場合は、次のことを考慮してください。

String concat(char... chars) {
  if (chars.length == 0) {
    return "";
  }
  StringBuilder s = new StringBuilder(chars.length);
  for (char c : chars) {
    s.append(c);
  }
  return s.toString();
}

適切な解決策として。

ただし、最適化したくなる人もいるかもしれません。

String s = "Name: '" + name + "'"; // String name;

これに:

String s = new StringBuilder().append("Name: ").append(name).append("'").toString();

これは善意によるものですが、最終的にはDON'Tです。

なんで?別の答えが正しく指摘したように、コンパイラーがこれを行います。したがって、自分で行う場合、コンパイラがコードを最適化することを許可していないか、それが良いアイデアであるかどうかに依存していません。コードは読みにくく、不必要に複雑です。

低レベルの最適化では、コンパイラはコードの最適化に優れています。

コンパイラにその仕事をさせてください。この場合、最悪のシナリオは、コンパイラが暗黙的にコードを正確に記述したものに変更することです。2 ~ 3 個の文字列を連結する方が、StringBuilder を構築するよりも効率的な場合があるため、そのままにしておく方がよい場合があります。コンパイラは、この点について最もよく知っています。

于 2008-11-30T01:56:43.203 に答える
9

たくさんの文字があり、それらを文字列に連結したい場合は、そうしないのはなぜですか

System.out.println("" + char1 + char2 + char3); 

?

于 2008-11-30T00:30:58.040 に答える
7

String コンストラクターを使用できます。

System.out.println(new String(new char[]{a,b,c}));
于 2008-11-30T06:33:59.620 に答える
4

空の文字列であっても、シーケンスを文字列で開始して、文字列連結を行うことをコンパイラに伝える必要があります。そのようです:

System.out.println("" + char1 + char2 + char3...);
于 2008-11-30T00:30:06.997 に答える
2

System.out.println(char1+""+char2+char3)

また

String s = char1+""+char2+char3;
于 2013-03-21T16:50:40.793 に答える
1

charタイプは単一の文字のみを保持するため、連結された文字の配列を保持するには、何らかの説明の String オブジェクトが必要です。例えば、

StringBuilder sb = new StringBuilder('a').append('b').append('c');
System.out.println(sb.toString);
于 2008-11-30T00:29:53.427 に答える
1

公開クラスのイニシャル {

public static void main (String [] args) {

    char initialA = 'M';
    char initialB = 'P';
    char initialC = 'T';

    System.out.println("" + initialA + initialB + initialC );


}   

}

于 2009-09-02T22:32:18.463 に答える
1

私は自分自身を Java プログラマーだとは思っていませんが、「完全を期すために」ここに追加すると思いました。(Cにインスパイアされた)String.format静的メソッドを使用:

String s = String.format("%s%s", 'a', 'b'); // s is "ab"
于 2016-10-29T06:16:10.753 に答える
-2
System.out.print(a + "" + b + "" + c);
于 2016-08-09T09:40:04.147 に答える