Java - 将动态数量的参数传递给 Formatter.format() 函数
Java - Passing dynamic number of arguments to Formatter.format() function
是否可以将动态数量的参数传递给 Formatter.format( ) 函数?我想将字符串数组中的所有字符串传递给 format() 函数。
像这样,
Formatter format;
format.format("FormatString" , "someString" , arrayOfString[0] , arrayOfString[1] , ... , arrayOfString[n] , "anotherString" );
动态参数基本上是一种语法糖形式,用于将参数数组传递给函数。在内部,动态参数是一个数组。
public Formatter format(String format, Object ... args)
与
基本相同
public Formatter format(String format, Object[] args)
除了在前一种情况下,您不必手动构建数组,编译器会为您完成。但是仍然可以传递一个参数数组,就好像该方法是用后一种语法编写的。
因此您可以构建自己的动态参数数组,其中包含您要传递的所有参数:
String[] arrayOfString;
Object[] arguments = new Object[arrayOfString.length + 2];
int argIndex = 0;
arguments[argIndex++] = "someString";
for (int i = 0; i < arrayOfString.length; i++) {
arguments[argIndex++] = arrayOfString[i];
}
arguments[argIndex++] = "anotherString";
Formatter formatter = new Formatter();
formatter.format("FormatString", arguments);
您只需使用数组流就可以解决这个问题:
Formatter formatter = new Formatter();
formatter.format(formatString, Arrays.stream(new Object[][]{array1, array2})
.flatMap(Arrays::stream).toArray());
是否可以将动态数量的参数传递给 Formatter.format( ) 函数?我想将字符串数组中的所有字符串传递给 format() 函数。
像这样,
Formatter format;
format.format("FormatString" , "someString" , arrayOfString[0] , arrayOfString[1] , ... , arrayOfString[n] , "anotherString" );
动态参数基本上是一种语法糖形式,用于将参数数组传递给函数。在内部,动态参数是一个数组。
public Formatter format(String format, Object ... args)
与
基本相同public Formatter format(String format, Object[] args)
除了在前一种情况下,您不必手动构建数组,编译器会为您完成。但是仍然可以传递一个参数数组,就好像该方法是用后一种语法编写的。
因此您可以构建自己的动态参数数组,其中包含您要传递的所有参数:
String[] arrayOfString;
Object[] arguments = new Object[arrayOfString.length + 2];
int argIndex = 0;
arguments[argIndex++] = "someString";
for (int i = 0; i < arrayOfString.length; i++) {
arguments[argIndex++] = arrayOfString[i];
}
arguments[argIndex++] = "anotherString";
Formatter formatter = new Formatter();
formatter.format("FormatString", arguments);
您只需使用数组流就可以解决这个问题:
Formatter formatter = new Formatter();
formatter.format(formatString, Arrays.stream(new Object[][]{array1, array2})
.flatMap(Arrays::stream).toArray());