web-dev-qa-db-ja.com

javaで文字を連結するにはどうすればよいですか?

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

私はそれをできた

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

しかし、これにより、1行の文字のみが取得されます。文字列として必要です。任意の助けをいただければ幸いです。

ありがとう

29
Wilson

それらから文字列を作りたいですか?

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();

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

上記の目的は、コンパイラーが何をすべきかを示すことではなく、コンパイラーが何をするかを説明することです。

50
Dustin

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

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

最初はcompile-timeで評価されます。 2番目はrun-timeで評価されます。

never(任意の型の)定数連結を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();

これは意図的なものですが、一番下の行はDO N'Tです。

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

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

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

23
cletus

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

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

String constructor を使用できます。

System.out.println(new String(new char[]{a,b,c}));
5
Dennis C

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

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

または

String s = char1+""+char2+char3;
2
Elvis

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

StringBuilder sb = new StringBuilder('a').append('b').append('c');
System.out.println(sb.toString);
1
Ewen Cartwright

パブリッククラスのイニシャル{

public static void main (String [] args) {

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

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


}   

}

1
truman

これは、文字を連結または追加する非常に簡単なアプローチです

       StringBuilder desc = new StringBuilder(); 
       String Description="this is my land"; 
       desc=desc.append(Description.charAt(i));
0

私は自分をJavaプログラマーとは考えていませんが、ここでは「完全性のため」に追加すると思いました。(Cに触発された)String.format静的メソッド:

String s = String.format("%s%s", 'a', 'b'); // s is "ab"
0
Aky