Javaで文字列を連結しようとしています。なぜこれが機能しないのですか?
public class StackOverflowTest {
public static void main(String args[]) {
int theNumber = 42;
System.out.println("Your number is " . theNumber . "!");
}
}
+
演算子を使用して文字列を連結できます。
System.out.println("Your number is " + theNumber + "!");
theNumber
は暗黙的にString "42"
に変換されます。
Javaの連結演算子は+
であり、.
ではありません
これを読む (すべてのサブセクションを含む)始める前に。 PHPの考え方をやめようとする;)
Javaで文字列を使用する際の視野を広げるために、文字列の+
演算子は実際には(コンパイラによって)次のようなものに変換されます。
new StringBuilder().append("firstString").append("secondString").toString()
この質問には2つの基本的な答えがあります。
+
演算子(文字列連結)を使用します。 "your number is" + theNumber + "!"
(別の箇所で述べたように)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;
すぐに使用できるように、変数の値をString
に注入するための3つの方法があります。
String
と任意のオブジェクトまたはプリミティブ型の間で演算子+
を使用するだけで、String
と
String.valueOf(obj)
の値は、String
がnull
の場合はobj
"null
"に対応し、それ以外の場合はobj.toString()
の値です。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!
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!
メソッド 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
が明確になるというアイデアを持っているということです。これは読みやすく、保守がずっと簡単だからです。
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);
あなたはPHPプログラマでなければなりません。
+
記号を使用します。
System.out.println("Your number is " + theNumber + "!");
2つの文字列を正確に連結するには、次を使用してください。
file_names = file_names.concat(file_names1);
あなたの場合、+
の代わりに.
を使用してください
パフォーマンスを向上させるには、str1
とstr2
が文字列変数であるstr1.concat(str2)
を使用します。
「。」の代わりに「+」
文字列の連結には+
を使用します。
"Your number is " + theNumber + "!"
これは動作するはずです
public class StackOverflowTest
{
public static void main(String args[])
{
int theNumber = 42;
System.out.println("Your number is " + theNumber + "!");
}
}
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);
ここで、「」はスペースのみに使用されます。
Javaでは、連結記号は「。」ではなく「+」です。
「。」ではなく「+」。
ただし、文字列の連結には注意してください。 IBM DeveloperWorks からの考えを紹介するリンクがあります。
import com.google.common.base.Joiner;
String delimiter = "";
Joiner.on(delimiter).join(Lists.newArrayList("Your number is ", 47, "!"));
これは、opの質問に答えるのはやり過ぎかもしれませんが、より複雑な結合操作について知っておくと便利です。このstackoverflowの質問は、この分野の一般的なGoogle検索で非常にランク付けされているので、知っておくと良いでしょう。
これには複数の方法がありますが、OracleとIBMは、+
を使用することは悪い習慣であると言っています。 JVMの余分なスペースを利用し、プログラムのスペースが不足したり、速度が低下したりする場合があります。
StringBuilder
またはStringBuffer
を使用するのが最善の方法です。 StringBuffer
に関連する例については、上記のNicolas Fillatoのコメントをご覧ください。
String first = "I eat"; String second = "all the rats.";
System.out.println(first+second);
+
演算子を使用して文字列を連結できます。
String a="hello ";
String b="world.";
System.out.println(a+b);
出力:
hello world.
それでおしまい
次に、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);
}
}
stringbuffer、stringbuilderを使用できます。また、前に述べたように、「+」も使用できます。 「+」の速さはわかりません(短い文字列では最速だと思います)が、長い間、ビルダーとバッファーはほぼ等しいと思います(ビルダーは同期されていないため、若干高速です)。
最初の方法:文字列の連結に「+」記号を使用できますが、これは常に印刷時に発生します。別の方法:Stringクラスには、2つの文字列を連結するためのメソッドが含まれています。string1.concat(string2);