文字列変数の補間Java
Javaの文字列の構築は私を混乱させます。私は次のようなことを嫌います:
url += "u1=" + u1 + ";u2=" + u2 + ";u3=" + u3 + ";u4=" + u4 + ";";
url += "x=" + u1 + ";y=" + u2 + ";z=" + u3 + ";da1=" + u4 + ";";
url += "qty=1;cost=" + orderTotal + ";ord=" + orderId + "?";
または、StringBuilderを使用すると、次のようになります。
url.append("u1=");
url.append(u1);
url.append(";u2=");
url.append(u2);
url.append(";u3=");
url.append(u3);
url.append(";u4=");
url.append(u4);
url.append(";");
url.append("x=");
url.append(u1);
url.append(";y=");
url.append(u2);
url.append(";z=");
url.append(u3);
url.append(";da1=");
url.append(u4);
url.append(";");
url.append("qty=1;");
url.append("cost=");
url.append(orderTotal);
url.append(";ord=");
url.append(orderId);
url.append("?");
確かに何かが欠けています。より良い方法になるGOTがあります。何かのようなもの:
の代わりに:
urlString += "u1=" + u1 + ";u2=" + u2 + ";u3=" + u3 + ";u4=" + u4 + ";";
行う:
urlString += Interpolator("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4);
または:
urlStringBuilder.append(Interpolator("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4));
Java 5以上を使用している場合は、 String.format
を使用できます。
urlString += String.format("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4);
詳細については、 Formatter
を参照してください。
Javaには変数補間がないことに注意してください。変数補間は、文字列内の値を使用した変数置換です。 Rubyの例:
#!/usr/bin/Ruby
age = 34
name = "William"
puts "#{name} is #{age} years old"
Rubyインタープリターは、変数をストリング内の値に自動的に置き換えます。補間を行うという事実は、シギル文字によって示唆されます。 Rubyでは、#{}です。 Perlでは、$、%、または@になります。 Javaはそのような文字のみを印刷し、それらを展開しません。
Javaでは、変数補間はサポートされていません。これの代わりに、文字列の書式設定があります。
package com.zetcode;
public class StringFormatting
{
public static void main(String[] args)
{
int age = 34;
String name = "William";
String output = String.format("%s is %d years old.", name, age);
System.out.println(output);
}
}
Javaでは、String.format()メソッドを使用して新しい文字列を作成します。結果は同じですが、方法は異なります。
http://en.wikipedia.org/wiki/Variable_interpolation を参照してください
Edit2019年現在、 JEP 326 (Raw String Literals)は撤回され、 JEP 355 =(テキストブロック)。後者は、言語に「テキストブロック」を導入しようとします。
テキストブロックは複数行の文字列リテラルであり、ほとんどのエスケープシーケンスの必要性を回避し、予測可能な方法で文字列を自動的にフォーマットし、必要に応じて開発者がフォーマットを制御できるようにします。
ただし、文字列補間はまだありません:
非目標:テキストブロックは、文字列の補間を直接サポートしていません。補間は、将来のJEPで検討される可能性があります。
それに加えて、数値引数インデックスを持つという利点がある Java.text.MessageFormat もあります。
ドキュメントの最初の例を追加する
int planet = 7;
String event = "a disturbance in the Force";
String result = MessageFormat.format(
"At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
planet, new Date(), event);
結果:
At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.
String.format()
救助に!!
JVMのスーパー(コード)JavaであるKotlinを使用できます。ES5、RubyおよびPythonのような文字列を補間するニースの方法があります。
class Client(val firstName: String, val lastName: String) {
val fullName = "$firstName $lastName"
}