Java の文字列連結は、2 つ以上の文字列を結合して新しい文字列を返す操作です。また、連結操作を使用して型を文字列にキャストすることもできます。Java では 2 つの異なる方法で文字列を連結できます。
concat() メソッド
Concat()メソッドは、指定された文字列を指定された文字列の末尾に追加してから戻り、形成された新しい文字列を返します。確かにconcat()メソッドを使用して 3 つ以上の文字列を結合できます。concat() メソッドのシグネチャ
public String concat(String str)
このメソッドは、現在の文字列の末尾に文字列 str を連結します。例えば:
String s1 = “Hello ”;
s1.concat("World")
新しい文字列「Hello World」を返します。
Concat() メソッドの例
初期化後に 2 つの文字列を連結し、さらに文字列を連結してみましょう。そして、もう 1 つの興味深い例として、引数に応じて異なるメッセージを返すメソッドを作成します。
public class ConcatTest {
public static void main(String[] args) {
//String concat with concat() method
String string1 = "I learn ";
String string2 = "concatenation in Java";
//here we use concat() method to join the two strings above
String result = string1.concat(string2);
System.out.println(result);
//concat() method to join 4 strings
String myWebSite = "Code".concat("Gym").concat(".cc").concat("/quest");
System.out.println(myWebSite); // here we've got "CodeGym.cc/quest"
System.out.println(myMessage(true));
System.out.println(myMessage(false));
}
private static String myMessage(boolean b) { //concat() method with selection statement
return "I have".concat(b ? " " : "n't ").concat("got it");
}
}
出力は次のとおりです。
Java CodeGym.cc/questで連結を学びます 理解しています 理解していません
concat()メソッドは文字列を変更するのではなく、現在の文字列とパラメータとして渡された文字列をマージした結果として新しい文字列を作成することを知っておくことが 重要です。したがって、メソッドは新しいStringオブジェクトを返すため、このような長い String 連結チェーンを作成できます。
オーバーロードされた演算子「+」および「+=」を使用した連結
これら 2 つの演算子は、数値と同じように使用できます。これらはconcat()と同じように機能します。文字列「Code」と文字列「Gym」を連結してみましょう。
public class StringConcat {
public static void main(String[] args) {
String myString = "Code" + "Gym";
myString+= ".cc";
System.out.println(myString);
}
}
通常、Java ではユーザー クラスの操作をオーバーロードすることはできませんが、これら 2 つの演算子はオーバーロードされたものとして機能します。+演算子の内部にconcat()が隠されていると思われるかもしれませんが 、実際には、ここでは別のメカニズムが使用されています。Java プログラムのバイトコードを見ると、StringBuilderが作成され、そのappend()メソッドが使用されていることがわかります。Java コンパイラは「+」演算子を見て、オペランドがプリミティブ型ではなく文字列であることを認識します。したがって、concatのように機能します。
public class StringTest2 {
public static void main(String[] args) {
String hello = "hello";
String world = " world!";
String helloworld = (new StringBuilder().append(hello).append(world).toString());
System.out.println(helloworld);
//this is the same as:
String result = hello + world;
}
}
Concat(0) または + ?
文字列を 1 回だけ結合する必要がある場合は、concat()メソッドを使用します。それ以外の場合は、+またはStringbuffer / StringBuilder演算子のいずれかを使用することをお勧めします。また、+演算子は型の変換に使用されます。オペランドの 1 つが等しく、たとえば数値で、2 番目が文字列の場合、終了時に文字列が取得されます。例:
public class StringConcat {
public static void main(String[] args) {
int myInt = 5;
String myString = " days";
System.out.println(myInt + myString);
boolean b = (myInt + myString) instanceof String;
System.out.println(b);
}
}
(myInt + myString) がStringかどうかを確認するために、instanceof を使用しました。このプログラムの出力は次のとおりです。
本当の5日
また、文字列の 1 つが null の場合、+演算子とconcat()の動作が異なることにも注意してください。+または+=演算子を使用するときにオペランドの 1 つが1 つだけ (文字列) の場合、すでに述べたように、型変換が発生します。同じことがnullにも当てはまります。新しい文字列を取得するだけです。
public class StringConcat {
public static void main(String[] args) {
String myString = "book ";
System.out.println(myString + null);
System.out.println((myString + null) instanceof String);
}
}
出力は次のとおりです。
ブック null true
同じ操作にconcat()メソッドを適用すると、 NullPointerExceptionが発生します。
public class StringConcat {
public static void main(String[] args) {
String myString = "book ";
System.out.println(myString.concat(null));
}
}
出力は次のとおりです。
スレッド「メイン」での例外 java.lang.NullPointerException at java.base/java.lang.String.concat(String.java:1972) at StringConcat.main(StringConcat.java:6)
GO TO FULL VERSION