Java 如何从字符串格式中删除未使用的位置参数

Java 如何从字符串格式中删除未使用的位置参数,java,Java,我有这样一种模式: String pattern = "{0},{1},{2},{3},{4},{5},{6},{7}"; 我有一个值数组,以这种模式填充: Object[] values = new String[8]; 这个值数组是动态的,有时它会填充满8个分配的插槽,有时会小于此值,但决不会超过分配的大小 现在当它少于8个插槽时(例如),当我使用 MessageFormat messageFormat = new MessageFormat(pattern); header = new

我有这样一种模式:

String pattern = "{0},{1},{2},{3},{4},{5},{6},{7}";
我有一个值数组,以这种模式填充:

Object[] values = new String[8];
这个值数组是动态的,有时它会填充满8个分配的插槽,有时会小于此值,但决不会超过分配的大小

现在当它少于8个插槽时(例如),当我使用

MessageFormat messageFormat = new MessageFormat(pattern);
header = new StringBuffer();
messageFormat.format(values, header, null);
他们的位置仍然是那些找不到替代者的位置:

e、 g:

输出

abc,cde,gef,{3},{4}
但我想要的是,这些立场也应该改变: 最终输出应如下所示:

abc, cde, gef
String pattern=“{0},{1},{2},{3},{4}”;
String[]patternArray=pattern.split(“}”);
对象[]值={“abc”、“cde”、“gef”};
StringBuilder patternBuilder=新StringBuilder();
对于(int i=0;i
您可以使用
ArrayList
而不是普通数组。您的实际格式可能更复杂。但在这种特殊情况下,您可能只想连接字符串:我认为这不会有任何区别,因为在ArrayList中,我的值可能小于模式中提供的位置参数…@Andreyes absolute我的格式更复杂,由于此模式将在全局范围内定义,下面的每个模式都应遵循此格式来格式化其字符串模板的所有非占位符部分是否应保留?或者应该从最后填写的占位符中截断完整的模板?换句话说,你真的想要“abc,cde,gef”还是“abc,cde,gef,,”?
abc, cde, gef
String pattern = "{0},{1},{2},{3},{4}";
String[] patternArray = pattern.split("}");
Object[] values = {"abc", "cde", "gef"};
StringBuilder patternBuilder = new StringBuilder();
for(int i = 0; i < values.length; ++i){
  patternBuilder.append(patternArray[i]).append("}");
}
pattern = patternBuilder.toString();
MessageFormat messageFormat = new MessageFormat(pattern);
StringBuffer header = new StringBuffer();
System.out.println(messageFormat.format(values, header, null));