使用 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 映射,您现在可以将动态工作的字符串组合在一起。当然,它只适用于地图中最大的索引。
我有多个 %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 映射,您现在可以将动态工作的字符串组合在一起。当然,它只适用于地图中最大的索引。