使用数组从文件读取的Java / kotlin格式字符串

时间:2018-04-27 03:29:46

标签: java kotlin

正如标题所说,我想知道是否有任何修改方法在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]}

如您所见,我想阅读文件,然后格式化结果。

另外,我很抱歉这个问题。 因为似乎改变了如何格式化从文件中读取的字符串。

3 个答案:

答案 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!