如何在字符串中包含变量?

因此,我们都应该知道,可以通过以下方法将变量包含到字符串中:

String string = "A string " + aVariable;

有没有这样的方法:

String string = "A string {aVariable}";

换句话说: 不需要关闭引号和加号,非常没有吸引力。

338980 次浏览

您总是可以使用 String.format (... .),

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

我不知道这是否足够吸引你,但它可以相当方便。语法与 printf 和 java.util 相同。Formatter.我经常使用它,特别是当我想显示表格数值数据时。

这就是所谓的字符串插值; 它在 Java 中并不存在。

一种方法是使用 String.format:

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

另一种方法是使用模板库,如 速度FreeMarker

还要考虑 java.text.MessageFormat,它使用了一个相关的语法,其中包含数值参数索引,

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

string的结果包含以下内容:

A string of ponies.

更常见的情况是,该类用于其数字和时态格式。JFreeChart标签格式的一个示例描述为 给你; 类 RCInfo格式化游戏的状态窗格。

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

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

String myString = String.format (“ this is my String% s% 2d”,variable1Name,variable2Name) ;

从 Java15开始,您可以使用一个名为 String::formatted(Object... args)的非静态字符串方法

例如:

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


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

产出:

“先是傻瓜,然后是酒吧”

可以使用 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"