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


114

好的,所以我们所有人都应该知道可以通过以下操作将变量包括在字符串中:

String string = "A string " + aVariable;

有没有办法做到这一点:

String string = "A string {aVariable}";

换句话说:不必关闭引号并添加加号。这很没有吸引力。


10
@Chandra请不要问为什么,请解释一下。这就是我更喜欢这样做的方式。谢谢。
Gray Adams

3
使用Groovy,您将可以执行所有想要的“字符串$ {aVariable}”。
Kaleb Brasee 2012年

2
此问题中讨论了用于解决类似问题的各种技术,但是这些技术String.format()是语言的内置功能。
ig0774 2012年

@KalebBrasee听起来很完美,但是在修改语言时我总是很犹豫。我不想让自己退缩。
Gray Adams'3

1
@GrayAdams Groovy不会让您退缩,它会让您自由!:D
Kaleb Brasee 2012年

Answers:


122

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

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

我不确定这是否对您足够吸引人,但这可能非常方便。语法与printf和java.util.Formatter相同。我已经使用了很多,尤其是当我想显示表格数值数据时。


2
我知道这是一个见解,但是我看不出format它比简单的String串联表达式更具吸引力。在哪里format,当你需要做填充,数字格式,等等进入了自己的。
Stephen C

1
@StephenC:我完全不同意你的看法。但这是String格式化的有用替代方法,尤其是在需要像我上面所说的那样进行填充时(即,显示表格数值数据)。我已经用了很多时间来格式化血液化学和CBC结果报告。
气垫船充满鳗鱼,2012年

@StephenC我之所以喜欢格式,有几个原因:首先,'%d'使用平台行定界符。其次,您可以轻松地在最后找到所有变量。您可以轻松地重新格式化甚至重新排列您输入的变量。避免错误(例如1 + "oops")更容易,尤其是在使用FindBugs(解析格式字符串和输入参数)的情况下。而且,正如问问者所说,在许多情况下,它更具可读性。当然,将format方法设置为静态是可耻的,这是一个非常愚蠢的设计错误。
Maarten Bodewes 2012年

@owlstead- “当然,将format方法设置为静态是很遗憾的,这是一个非常愚蠢的设计错误。” 。??怎么会format涉及到目标字符串?当然,您不是在建议我们写信"A String %s %2d".format(aStringVar, anIntVar)……是吗?
Stephen C

1
@owlstead-“ asFormat”不正确。这意味着该方法正在创建并返回一个格式对象。
Stephen C


38

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

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

结果string包含以下内容:

A string of ponies.

更常见的是,该类用于其数字和时间格式。JFreeChart标签格式化的一个例子在这里描述; 该类会RCInfo格式化游戏的状态窗格。


1
对于来自CSharp的人来说,这种方式更简单,因为它类似于C#中的string.Format。
Mojtaba

0

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.