如何使用java替换非常大的字符串中的字符,从而产生较大的内存?

如何使用java替换非常大的字符串中的字符,从而产生较大的内存?,java,string,memory,Java,String,Memory,我有一个大字符串,需要替换其中的几个字符串路径 我已经编写了如下代码,并且在部署的环境中使用了非常大的内存 我在网上读过,想知道是否有更好的方法可以重写这篇文章,但没有找到结论性的答案 任何人都可以对下面的代码给出任何建议 String response = "@very #large & string % STUFF"; System.out.println(response); String[] SPECIAL_CHARACTERS = {"&","

我有一个大字符串,需要替换其中的几个字符串路径

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

我在网上读过,想知道是否有更好的方法可以重写这篇文章,但没有找到结论性的答案

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

    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);

我将通过从输入读取数据包并将其附加到输出来解决此类问题。因此,假设这个非常大的字符串被称为输入,我总是会将易于管理的数据包从输入读入temp,对temp执行替换算法,然后将temp附加到输出,在循环之前,应该将其初始化为空字符串


您遇到的问题是您总是替换整个字符串。因此,不是每次替换响应,而是对较小的数据包进行所有替换,并将结果添加到字符串变量。

我将通过从输入读取数据包并将其附加到输出来解决此类问题。因此,假设这个非常大的字符串被称为输入,我总是会将易于管理的数据包从输入读入temp,对temp执行替换算法,然后将temp附加到输出,在循环之前,应该将其初始化为空字符串

您遇到的问题是您总是替换整个字符串。因此,不是每次替换响应,而是对较小的数据包执行所有替换,并将结果添加到字符串变量

我有一个大字符串,需要替换其中的几个字符

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

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

   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();
但这会分配更多内存

我有一个大字符串,需要替换其中的几个字符

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

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

   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();

但是这会分配更多的内存。

啊,Java/.NET世界令人烦恼的不变性。例如Web请求字符串的来源是什么,输出的目的地是什么例如文件/数据库?我从数据库中获取具有这些特殊字符的数据,然后在java代码中替换它并在REST API响应中返回它。出于性能考虑,我无法在DB sql中进行替换。啊,Java/.NET世界令人烦恼的不变性。例如Web请求字符串的来源是什么,输出的目的地是什么例如文件/数据库?我从数据库中获取具有这些特殊字符的数据,然后在java代码中替换它并在REST API响应中返回它。出于性能考虑,我不能在DB sql中进行替换。我不确定我是否遵循了它。一个代码示例会很方便。@satish为了做到这一点,我需要在发布它之前对它进行测试,但我懒得这么做。如果你愿意,你可以尝试实现它,当你陷入困境时,你可能会问问题。我不确定我是否遵循了它。一个代码示例会很方便。@satish为了做到这一点,我需要在发布它之前对它进行测试,但我懒得这么做。如果您愿意,您可以尝试实施它,当您遇到困难时,您可以提出问题。谢谢。实际上,我没有提到要替换的文本可以是字符串,因此我创建了一个字符串数组。我正试图思考在这种情况下,这个代码片段将如何工作,因为我必须编写一个通用代码来替换特定的文本。我更新了我的问题,以反映同样的情况。在这种情况下,我想我需要使用导致内存问题的String.replace函数。你也这么认为吗?你可以很容易地修改代码片段来处理这个问题。最后可能会用一系列if-else语句或循环替换开关。但我已经回答了你提出的问题。避免使用String.replace,因为每次调用它时都会复制整个字符串。修改代码段的关键是了解它们的工作原理。阅读代码。当你想起来的时候,这是很明显的。谢谢。实际上,我没有提到要替换的文本可以是字符串,因此我创建了一个字符串数组。我正试图思考在这种情况下,这个代码片段将如何工作,因为我必须编写一个通用代码来替换特定的文本。我更新了我的问题,以反映同样的情况。在这种情况下,我想我需要使用导致内存问题的String.replace函数。你也这么认为吗?你可以很容易地修改代码片段来处理这个问题。最后可能会用一系列if-else语句或循环替换开关。但我已经回答了这个问题
你问。避免使用String.replace,因为每次调用它时都会复制整个字符串。修改代码段的关键是了解它们的工作原理。阅读代码。当你想起来的时候,这是很明显的。