使用 java 中的参数列表格式化文本

Format text with a list of argument in java

我有多个 %s 用于字符串格式化。我有一个字符串数组,它们应该是字符串格式的参数。像这样

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
String toFormat =  "This is a first value %s, This is a second value %s"
String result = String.formant (toFormat, list.get(0), list.get(1));

但是如果元素数量大于 2,它看起来不太好。如何格式化字符串而不单独从列表中选择每个参数?

String.format() 将格式和对象数组作为参数(vararg 是幕后的对象数组)。您需要做的就是将您的列表转换为字符串数组并将其传递给 String.format(),如下所示:

public static void main(String args[]) {
    List<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    String toFormat =  "This is a first value %s, This is a second value %s";
    String result = String.format (toFormat, list.toArray(new String[0]));
    System.out.println(result);
}

您可以使用字符串生成器并使用它来动态构建一个大字符串吗?

使用 Java8 或更高版本,您可以执行类似的操作

import java.util.List;
import java.util.ArrayList;
import java.lang.StringBuilder;

class Main {
  public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    StringBuilder builder = new StringBuilder();
    list.forEach(it -> {
        builder.append(String.format("This is a first value %s,", it)
      }
    ));
    System.out.print(builder.toString());
  }
}

结果如下:This is a first value A,This is a first value B,

您可以在 forEach 中添加更多代码来修复字符串模式

重新考虑你的问题:

String toFormat =  "This is a first value %s, This is a second value %s"

所以重点是:你有多个参数,但是每个参数应该被特殊对待。含义:假设你有 3 个参数。那么您的格式 必须 包含 this is the third value。当您有 4 个参数时,string fourth ... 必须来自某个地方!

如果那是你想要的,那么你需要一个额外的映射,比如:

Map<Integer, String> namedPositionByIndex = ...

映射 (1, "first")(2, "second") 等对。

并且使用 that 映射,您现在可以将动态工作的字符串组合在一起。当然,它只适用于地图中最大的索引。