web-dev-qa-db-ja.com

Javaで2つの文字列を連結するにはどうすればよいですか?

Javaで文字列を連結しようとしています。なぜこれが機能しないのですか?

public class StackOverflowTest {  
    public static void main(String args[]) {
        int theNumber = 42;
        System.out.println("Your number is " . theNumber . "!");
    }
}
60
nn2

+演算子を使用して文字列を連結できます。

System.out.println("Your number is " + theNumber + "!");

theNumberは暗黙的にString "42"に変換されます。

87
Peter Lang

Javaの連結演算子は+であり、.ではありません

これを読む (すべてのサブセクションを含む)始める前に。 PHPの考え方をやめようとする;)

Javaで文字列を使用する際の視野を広げるために、文字列の+演算子は実際には(コンパイラによって)次のようなものに変換されます。

new StringBuilder().append("firstString").append("secondString").toString()
45
Bozho

この質問には2つの基本的な答えがあります。

  1. [単純] +演算子(文字列連結)を使用します。 "your number is" + theNumber + "!"(別の箇所で述べたように)
  2. [それほど単純ではない]:StringBuilder(またはStringBuffer)を使用します。
StringBuilder value;
value.append("your number is");
value.append(theNumber);
value.append("!");

value.toString();

このようなスタック操作にはお勧めしません:

new StringBuilder().append("I").append("like to write").append("confusing code");

編集:Java 5以降では、文字列連結演算子はコンパイラによってStringBuilder呼び出しに変換されます。このため、上記の両方の方法は同等です。

注:この文章が示すように、スペースは貴重な商品です。

警告:以下の例1は複数のStringBuilderインスタンスを生成し、以下の例2よりも効率が悪い

例1

String Blam = one + two;
Blam += three + four;
Blam += five + six;

例2

String Blam = one + two + three + four + five + six;
14
DwB

すぐに使用できるように、変数の値をStringに注入するための3つの方法があります。

1.最も簡単な方法

Stringと任意のオブジェクトまたはプリミティブ型の間で演算子+を使用するだけで、String

  1. オブジェクトの場合、 String.valueOf(obj) の値は、Stringnullの場合はobj "null"に対応し、それ以外の場合はobj.toString()の値です。
  2. プリミティブ型の場合、String.valueOf(<primitive-type>)と同等。

nullオブジェクト以外の例:

Integer theNumber = 42;
System.out.println("Your number is " + theNumber + "!");

出力:

Your number is 42!

nullオブジェクトの例:

Integer theNumber = null;
System.out.println("Your number is " + theNumber + "!");

出力:

Your number is null!

プリミティブ型の例:

int theNumber = 42;
System.out.println("Your number is " + theNumber + "!");

出力:

Your number is 42!

2.明示的な方法であり、潜在的に最も効率的な方法

StringBuilder (または StringBuffer スレッドセーフな古いバージョン)を使用して、Stringメソッドを使用してappendをビルドできます。

例:

int theNumber = 42;
StringBuilder buffer = new StringBuilder()
    .append("Your number is ").append(theNumber).append('!');
System.out.println(buffer.toString()); // or simply System.out.println(buffer)

出力:

Your number is 42!

舞台裏では、これは実際に最近のJavaコンパイラーが演算子+で行われたすべてのString連結を変換する方法です。前の方法との唯一の違いは、full control

実際、コンパイラーはdefaultコンストラクターを使用するため、デフォルトの容量(16)は、ビルドするStringの最終的な長さがわからないため、つまり、最終的な長さが16より大きい場合、容量は必然的に拡張され、パフォーマンスの面で価格がかかります。

したがって、最終的なStringのサイズが16よりも大きくなることが事前にわかっている場合、このアプローチを使用して初期容量を改善する方がはるかに効率的です。たとえば、この例では、長さが16を超えるStringを作成するため、パフォーマンスを向上させるために次のように書き換える必要があります。

最適化された例:

int theNumber = 42;
StringBuilder buffer = new StringBuilder(18)
    .append("Your number is ").append(theNumber).append('!');
System.out.println(buffer)

出力:

Your number is 42!

3.最も読みやすい方法

メソッド String.format(locale, format, args) または String.format(format, args) を使用して、両方とも Formatter を使用してStringを構築できます。これにより、引数の値で置き換えられるプレースホルダーを使用して、最終的なStringの形式を指定できます。

例:

int theNumber = 42;
System.out.println(String.format("Your number is %d!", theNumber));
// Or if we need to print only we can use printf
System.out.printf("Your number is still %d with printf!%n", theNumber);

出力:

Your number is 42!
Your number is still 42 with printf!

このアプローチの最も興味深い側面は、最終的なStringが明確になるというアイデアを持っているということです。これは読みやすく、保守がずっと簡単だからです。

7
Nicolas Filotto

Java 8の方法:

StringJoiner sj1 = new StringJoiner(", ");
String joined = sj1.add("one").add("two").toString();
// one, two
System.out.println(joined);


StringJoiner sj2 = new StringJoiner(", ","{", "}");
String joined2 = sj2.add("Jake").add("John").add("Carl").toString();
// {Jake, John, Carl}
System.out.println(joined2);
6
Andrejs

あなたはPHPプログラマでなければなりません。

+記号を使用します。

System.out.println("Your number is " + theNumber + "!");
4
Ed Manet

2つの文字列を正確に連結するには、次を使用してください。

file_names = file_names.concat(file_names1);

あなたの場合、+の代わりに.を使用してください

3
Learner

パフォーマンスを向上させるには、str1str2が文字列変数であるstr1.concat(str2)を使用します。

3
amanraj

「。」の代わりに「+」

3
Mateusz Dymczyk

文字列の連結には+を使用します。

"Your number is " + theNumber + "!"
3
Greg

これは動作するはずです

public class StackOverflowTest
{  
    public static void main(String args[])
    {
        int theNumber = 42;
        System.out.println("Your number is " + theNumber + "!");
    }
}
3
bragboy

Javaでは、連結シンボルは「+」です。 jdbcの使用中に2つまたは3つの文字列を連結しようとする場合は、次を使用します。

String u = t1.getString();
String v = t2.getString();
String w = t3.getString();
String X = u + "" + v + "" + w;
st.setString(1, X);

ここで、「」はスペースのみに使用されます。

2
Surajchamp

Javaでは、連結記号は「。」ではなく「+」です。

1
Uncommented

「。」ではなく「+」。

ただし、文字列の連結には注意してください。 IBM DeveloperWorks からの考えを紹介するリンクがあります。

1
JohnMetta
import com.google.common.base.Joiner;

String delimiter = "";
Joiner.on(delimiter).join(Lists.newArrayList("Your number is ", 47, "!"));

これは、opの質問に答えるのはやり過ぎかもしれませんが、より複雑な結合操作について知っておくと便利です。このstackoverflowの質問は、この分野の一般的なGoogle検索で非常にランク付けされているので、知っておくと良いでしょう。

0
Daniel Gerson

これには複数の方法がありますが、OracleとIBMは、+を使用することは悪い習慣であると言っています。 JVMの余分なスペースを利用し、プログラムのスペースが不足したり、速度が低下したりする場合があります。

StringBuilderまたはStringBufferを使用するのが最善の方法です。 StringBufferに関連する例については、上記のNicolas Fillatoのコメントをご覧ください。

String first = "I eat";  String second = "all the rats."; 
System.out.println(first+second);
0
surendrapanday

+演算子を使用して文字列を連結できます。

String a="hello ";
String b="world.";
System.out.println(a+b);

出力:

hello world.

それでおしまい

0
user3176024

次に、3番目の変数を使用せずに2つの文字列を読み取って連結する例を示します。

public class Demo {
    public static void main(String args[]) throws Exception  {
        InputStreamReader r=new InputStreamReader(System.in);     
        BufferedReader br = new BufferedReader(r);
        System.out.println("enter your first string");
        String str1 = br.readLine();
        System.out.println("enter your second string");
        String str2 = br.readLine();
        System.out.println("concatenated string is:" + str1 + str2);
    }
}
0
Rejul jazz

stringbuffer、stringbuilderを使用できます。また、前に述べたように、「+」も使用できます。 「+」の速さはわかりません(短い文字列では最速だと思います)が、長い間、ビルダーとバッファーはほぼ等しいと思います(ビルダーは同期されていないため、若干高速です)。

0
Goodwin Lu

最初の方法:文字列の連結に「+」記号を使用できますが、これは常に印刷時に発生します。別の方法:Stringクラスには、2つの文字列を連結するためのメソッドが含まれています。string1.concat(string2);

0
PJ Tang