正如标题所说,我想知道是否有任何修改方法在Java中使用数组格式化字符串。
让我举一个kotlin的例子。
var sentences = arrayOf("hello", "world")
var template = "Dialogue: ${sentences[0]}\n" +
"Dialogue: ${sentences[1]}\n"
template.format(sentences)
print(template)
以上代码效果很好。那么Java
怎么样?
对不起,我没有清楚地描述我的问题。当我遇到真实案例时,我发现我的代码现在无法为我工作。
实际上,从文件中读取template
。
var sentences = arrayOf("hello", "world")
var template = File("template.txt").readText()
template.format(sentences)
print(template)
template.txt文件包含:
Dialogue: ${sentences[0]}
Dialogue: ${sentences[1]}
如您所见,我想阅读文件,然后格式化结果。
另外,我很抱歉这个问题。 因为似乎改变了如何格式化从文件中读取的字符串。
答案 0 :(得分:4)
上面的代码完全错误地使用了String.format
。让我解释一下原因。
在前两行:
var sentences = arrayOf("hello", "world")
var template = "Dialogue: ${sentences[0]}\n" +
"Dialogue: ${sentences[1]}\n"
此处template
已经存在,它是String
,其值为"Dialogue: hello\nDialogue: world"
,这是您看到的结果。
如果您不信任我,请尝试使用不存在的变量名替换sentences
。您将收到编译错误,因为字符串在您创建时完全连接。 “字符串模板”只是+
的语法糖。
然后,您调用了template.format
,实际上是String.format
,未使用返回的字符串。
由于这在Kotlin中已经存在错误,因此您可以轻松地在Java中执行相同的操作:
String[] sentences = new String { "hello", "world" };
String template = "Dialogue: " + sentences[0] + "\n" +
"Dialogue: " + sentences[1] + "\n";
template.format(sentences);
System.out.print(template);
此代码等于您提供的Kotlin代码。
我想你想要这个:
String template = String.format("Dialogue: %s%nDialogue: %s%n", sentences);
System.out.print(template);
答案 1 :(得分:2)
您可以使用String.format()
:
String[] sentences = { "hello", "world" };
String template = "Dialogue: %s%nDialogue: %s%n";
String result = String.format(template, arr[0], arr[1]);
答案 2 :(得分:0)
使用%s
替换模板文件中的替换。
然后,Kotlin(Java)将为每个参数调用toString
方法,并根据参数的顺序替换它们。
//template.txt
%s magnificent %s!
//Main.kt
val sentences = arrayOf("hello", "world")
val template = File("template.txt").readText()
template.format(sentences)
print(template)
输出:
hello magnificent world!