如何将 StringBuilder[] 转换为 String[]

How to convert StringBuilder[] to String[]

我有一个 StringBuilder 对象数组,如下所示。

StringBuilder[] sbCmd = new StringBuilder[5];
int cntr = 0;
sbCmd[cntr++].append("add");
sbCmd[cntr++].append("sub");
sbCmd[cntr++].append("mul");
sbCmd[cntr++].append("div");
sbCmd[cntr++].append("mod");

现在我有一个函数,它将字符串数组作为输入,如下所示。

ConfigureMathOperation(String[] array)
{
  //Do some work
}

我怎么调用相同的?我试图在这里避免 String[] 因为它是不可变的(我有一些敏感数据需要在函数调用后清除)。

是否必须为存储在数组中的每个 StringBuilder 对象调用 toString?示例代码片段真的很有帮助,因为我是 Java.

的新手

例如,我想按如下方式调用,但它不起作用,因为我不知道如何调用每个 StringBuilder 对象。

ConfigureMathOperation(sbCmd.toString());

要直接回答问题,您可以使用流将 StringBuilder[] 轻松转换为 String[]:

String[] arr = Arrays.stream(sbCmd).map(StringBuilder::toString).toArray(String[]::new);

...但是:

I'm trying to avoid String[] here because it is immutable (I have some sensitive data which needs to be cleared after function call).

你无法避免它。如果你有一个接受字符串数组的库函数,那么你必须提供一个字符串数组——这显然需要使用字符串。

您唯一的其他选择是分叉库并删除字符串的使用。请注意,这可能是一项耗时且乏味的操作,但它远不只是确保没有字符串 parameters 被传入那么简单(因为库函数可以轻松调用sb.toString() 并获取一个字符串。)

更务实的方法是不用担心字符串会留在内存中,而是 运行 将您的代码放在安全、隔离的环境中,并让环境发挥作用。