Java - 在字符串中包含变量?

时间:2012-03-10 03:09:37

标签: java variables insert include quotation-marks

好的,所以我们都应该知道你可以通过执行以下操作将变量包含到字符串中:

String string = "A string " + aVariable;

有没有办法像:

String string = "A string {aVariable}";

换句话说:无需关闭引号并添加加号。这非常缺乏吸引力。

6 个答案:

答案 0 :(得分:96)

您始终可以使用String.format(....)。即,

String string = String.format("A String %s %2d", aStringVar, anIntVar);

我不确定这对你来说是否足够吸引人,但它可以非常方便。语法与printf和java.util.Formatter的语法相同。如果我想显示表格数字数据,我特别使用它。

答案 1 :(得分:53)

这称为字符串插值;它在Java中不存在。

一种方法是使用String.format:

String string = String.format("A string %s", aVariable);

另一种方法是使用模板库,例如VelocityFreeMarker

答案 2 :(得分:26)

还要考虑java.text.MessageFormat,它使用具有数字参数索引的相关语法。例如,

String aVariable = "of ponies";
String string = MessageFormat.format("A string {0}.", aVariable);

导致string包含以下内容:

A string of ponies.

更常见的是,该类用于数字和时间格式。描述了JFreeChart标签格式的示例here;类RCInfo格式化游戏的状态窗格。

答案 3 :(得分:1)

从Java 15开始,您可以使用称为String::formatted(Object... args)的非静态字符串方法

示例:

String foo = "foo";
String bar = "bar";

String str = "First %s, then %s".formatted(foo, bar);     

输出:

“先是foo,然后是bar”

答案 4 :(得分:1)

可以使用 Apache Commons StringSubstitutor

import org.apache.commons.text.StringSubstitutor;
// ...
Map<String, String> values = new HashMap<>();
values.put("animal", "quick brown fox");
values.put("target", "lazy dog");
StringSubstitutor sub = new StringSubstitutor(values);
String result = sub.replace("The ${animal} jumped over the ${target}.");
// "The quick brown fox jumped over the lazy dog."

该类支持为变量提供默认值。

String result = sub.replace("The number is ${undefined.property:-42}.");
// "The number is 42."

要使用递归变量替换,请调用 setEnableSubstitutionInVariables(true);

Map<String, String> values = new HashMap<>();
values.put("b", "c");
values.put("ac", "Test");
StringSubstitutor sub = new StringSubstitutor(values);
sub.setEnableSubstitutionInVariables(true);
String result = sub.replace("${a${b}}");
// "Test"

答案 5 :(得分:0)

您可以使用字符串格式在字符串中包含变量

我使用此代码在字符串中包含2个变量:

String myString = String.format(“这是我的字符串%s%2d”,variable1Name,variable2Name);