提问者:小点点

在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,就不太好了。我怎样才能格式化一个字符串而不从列表中单独选取每个参数?


共3个答案

匿名用户

String.format() 将 Object 的格式和数组作为参数(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);
}

匿名用户

重新思考你的问题:

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

所以重点是:你有多个参数,但每个参数都应该被特别对待。含义:假设你有 3 个参数。然后您的格式必须包含这是第三个值。当你有 4 个参数时,字符串第四...一定是从某个地方来的!

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

Map<Integer, String> namedPositionByIndex = ...

映射对,如(1,“第一”),(2,“第二”)等。

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

匿名用户

能不能用字符串生成器,用它动态构建一个大字符串。

使用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());
  }
}

结果如下:这是第一个值a,这是第一值B,

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