如何使用java替换非常大的字符串中的字符导致内存大?



我有一个很大的String,我需要在其中替换一些字符串路径。

我编写了如下代码,并且在部署的环境中获得了非常大的内存使用量。

我已经在网上阅读了,看看是否有任何更优化的方法可以重写,但找不到决定性的答案。

任何人都可以对下面的代码给出任何建议。

String response = "@very #large  & string % STUFF";
System.out.println(response);
String[] SPECIAL_CHARACTERS = {"&","%","#","STUFF"};
for(int count = 0;count<SPECIAL_CHARACTERS.length;count++)
{
if(response.contains(SPECIAL_CHARACTERS[count]))
{
response = response.replace(SPECIAL_CHARACTERS[count],"");
}
}
System.out.println(response);

我有一个很大的String,我需要替换几个字符。

我会避免陷入这种情况。 流式传输您的数据! (为什么数据库中存储了一个"非常大"的字符串? 这听起来不太好。

如果不能,这是执行您正在执行的操作的最节省内存的方法:

int len = response.length();
for (int i = 0; i < len; i++) {
char ch = response.charAt(i);
switch (ch) {
case '&': case '%': case '#': case '@':
break;
default:
System.out.print(ch);
}
}
System.out.println();

在某些情况下,最好使用StringBuilder,以便可以执行单个写入操作。

int len = response.length();
StringBuilder temp = new StringBuilder(len);
for (int i = 0; i < len; i++) {
char ch = response.charAt(i);
switch (ch) {
case '&': case '%': case '#': case '@':
break;
default:
temp.append(ch);
}
}
System.out.println(temp.toString());

但这会分配更多的内存。

我会通过从输入中读取数据包并将它们附加到输出来解决此类问题。所以,假设非常大的String被称为input,我总是会从input读取易于管理的数据包到temp,执行替换temp的算法,然后将temp附加到output,应该在循环之前初始化为空String

您遇到的问题是您总是在更换整个String。因此,与其每次都替换响应,不如对较小的数据包进行所有替换,并将结果添加到String变量中。

最新更新