想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。
我对字符串格式中的多个%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()
将 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
中添加更多代码来修复字符串模式