由于我正在使用Java 14和15预览功能。试图找到Java中的字符串插值。
我找到的最接近的答案是String.format("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4)
因为我从很多参考资料中得到的答案都是4,5年前的老问题了,java 11,12,13,14,15中的字符串插值是否有任何更新,相当于C#
string name = "Horace";
int age = 34;
Console.WriteLine($"Your name is {name} and your age {age}");
EDIT:JEP 340涵盖了这一点以及更多内容,已被提议针对JDK 21。
5条答案
按热度按时间6ojccjat1#
有一个东西 * 稍微 * 接近;
String::format
的示例版本,称为formatted
:它类似于
String::format
,但在链式表达式中使用更友好。ssm49v7z2#
据我所知,标准java库中没有关于这种字符串格式的更新。
换句话说:你仍然被“卡住”,要么使用
String.format()
和它的基于索引的替换机制,要么你必须选择一些第三方库/框架,如Velocity,FreeMarker,...请参阅here以获得初步概述。x0fgdtte3#
目前没有内置的支持,但可以使用Apache Commons
StringSubstitutor
。此类支持为变量提供默认值。
要使用递归变量替换,请调用
setEnableSubstitutionInVariables(true);
。xv8emn3q4#
您也可以像这样使用MessageFormat(Java5.0或更高版本)
非常好
dldeef675#
看起来很好的C#风格的插值在这些Java版本中是不可用的。为什么我们需要这个-有很好的和可读的代码行转储文本到日志文件。
下面是工作的示例代码(有注解的org.apache.commons.lang3.StringUtils,在编写时需要,但后来不是)-它正在丢弃ClassNotFound或其他NotFoundException -我没有调查过它。
StringSubstitutor稍后可能会打包成更好的东西,这将使它更容易用于日志消息转储