Строка формата Java / kotlin, которая читает из файла, используя массив - PullRequest
0 голосов
/ 27 апреля 2018

Как говорит заголовок, я хочу знать, есть ли какой-нибудь традиционный способ форматирования строки с использованием массива в Java.

Позвольте мне привести пример с котлином.

var sentences = arrayOf("hello", "world")
var template = "Dialogue: ${sentences[0]}\n" +
                "Dialogue: ${sentences[1]}\n"

template.format(sentences)

print(template)

Над кодом хорошо работает. Так как насчет Java?

EDIT

Извините, я четко не описал свой вопрос. И когда я столкнулся с моим реальным делом, я обнаружил, что мой код не может работать для меня сейчас.

На самом деле, 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 голосов
/ 27 апреля 2018

Код выше совершенно неверное использование 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);

Этот код соответствует указанному вами коду Котлина.

Я думаю, вы хотите это:

String template = String.format("Dialogue: %s%nDialogue: %s%n", sentences);
System.out.print(template);
0 голосов
/ 01 мая 2018

Используйте %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!
0 голосов
/ 27 апреля 2018

Вы можете использовать String.format():

String[] sentences = { "hello", "world" };
String template = "Dialogue: %s%nDialogue: %s%n";
String result = String.format(template, arr[0], arr[1]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...