Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android内存不足异常,而HTML正在删除字符串_Android_Memory Management_Out Of Memory - Fatal编程技术网

Android内存不足异常,而HTML正在删除字符串

Android内存不足异常,而HTML正在删除字符串,android,memory-management,out-of-memory,Android,Memory Management,Out Of Memory,我必须对大小为~1,4MB的字符串(HTML转义XML文件(因此字符串中的所有val都是<;TAG>;val<;/TAG>;等等)进行HTML取消转义,以便在解析器中使用未转义的XML) 我遇到的问题是,在使用StringEscapeUtils.unescapeHtml(String)(apache-commons-lang-2.6库)时,当我尝试获取未转义字符串时,总是会出现内存不足异常 我还尝试了基本android api的方法来取消对字符串的scape,但是除了速度非常慢之

我必须对大小为~1,4MB的字符串(HTML转义XML文件(因此字符串中的所有val都是<;TAG>;val<;/TAG>;等等)进行HTML取消转义,以便在解析器中使用未转义的XML)

我遇到的问题是,在使用StringEscapeUtils.unescapeHtml(String)(apache-commons-lang-2.6库)时,当我尝试获取未转义字符串时,总是会出现内存不足异常

我还尝试了基本android api的方法来取消对字符串的scape,但是除了速度非常慢之外,内存不足异常甚至在较小的字符串(~700kb)中也会发生


有人能告诉我如何处理这样的字符串转换而不出现内存不足异常吗?

Java有一些很好的核心功能,可以让这项工作变得非常简单。 下面的解决方案使用正则表达式遍历内容,并允许您替换字符。这个解决方案确实需要做一些工作,因为您需要提供转义码。你可以在这里找到转义码列表[http://www.w3.org/TR/html4/sgml/entities.html][1] 或者为其他人搜索网络

代码如下:

import java.util.regex.*;
import java.util.*;

public class HtmlUnescape {
    public static void main(String[] args){
        HashMap<String,String> codes = new HashMap<String,String>();
        codes.put("&lt;", "<");
        codes.put("&gt;", ">");
        codes.put("&#34;", "\"");

        String html = "&lt;html&gt;&lt;head&gt;&lt;title&gt;Hello&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;The great escape &#34;example&#34;&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;";

        Matcher matcher = Pattern.compile("&#*\\w\\w\\w?\\w?;").matcher(html);
        StringBuffer matchBuffer = new StringBuffer();
        while(matcher.find()){
            matcher.appendReplacement(matchBuffer, codes.get(matcher.group()));
        }
        matcher.appendTail(matchBuffer);
        System.out.println (matchBuffer.toString());
    }
}
import java.util.regex.*;
导入java.util.*;
公共类逃逸{
公共静态void main(字符串[]args){
HashMap代码=新的HashMap();
代码。放置(“,”);
代码。放置(";,“\”);
String html=“htmlheadtitlehlello/title/headbodyh1大逃亡";示例";/h1/body/html”;
Matcher Matcher=Pattern.compile(&#*\\w\\w\\w?\\w?).Matcher(html);
StringBuffer matchBuffer=新的StringBuffer();
while(matcher.find()){
appendReplacement(matchBuffer,code.get(matcher.group());
}
matcher.appendTail(匹配缓冲区);
System.out.println(matchBuffer.toString());
}
}
代码中发生了什么:

  • 首先,散列将代码存储到unescape
  • 第二,变量html存储要处理的转义html
  • 接下来,我们使用正则表达式搜索并替换转义代码,使用:
    • Matcher.find()
    • Matcher.appendReplacement(),以及
    • appendTail()方法

试试看。我对像您这样的大文件的性能没有什么见解。但是,代码非常简单,您可以对其进行调整以获得所需的性能。

Java有一些很好的核心功能来实现这一点,非常简单。 下面的解决方案使用正则表达式浏览您的内容,并允许您替换字符。此解决方案确实需要做一些工作,因为您需要提供转义码。您可以在此处找到转义码列表[http://www.w3.org/TR/html4/sgml/entities.html][1] 或者为其他人搜索网络

代码如下:

import java.util.regex.*;
import java.util.*;

public class HtmlUnescape {
    public static void main(String[] args){
        HashMap<String,String> codes = new HashMap<String,String>();
        codes.put("&lt;", "<");
        codes.put("&gt;", ">");
        codes.put("&#34;", "\"");

        String html = "&lt;html&gt;&lt;head&gt;&lt;title&gt;Hello&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;The great escape &#34;example&#34;&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;";

        Matcher matcher = Pattern.compile("&#*\\w\\w\\w?\\w?;").matcher(html);
        StringBuffer matchBuffer = new StringBuffer();
        while(matcher.find()){
            matcher.appendReplacement(matchBuffer, codes.get(matcher.group()));
        }
        matcher.appendTail(matchBuffer);
        System.out.println (matchBuffer.toString());
    }
}
import java.util.regex.*;
导入java.util.*;
公共类逃逸{
公共静态void main(字符串[]args){
HashMap代码=新的HashMap();
代码。放置(“,”);
代码。放置(";,“\”);
String html=“htmlheadtitlehlello/title/headbodyh1大逃亡";示例";/h1/body/html”;
Matcher Matcher=Pattern.compile(&#*\\w\\w\\w?\\w?).Matcher(html);
StringBuffer matchBuffer=新的StringBuffer();
while(matcher.find()){
appendReplacement(matchBuffer,code.get(matcher.group());
}
matcher.appendTail(匹配缓冲区);
System.out.println(matchBuffer.toString());
}
}
代码中发生了什么:

  • 首先,散列将代码存储到unescape
  • 第二,变量html存储要处理的转义html
  • 接下来,我们使用正则表达式搜索并替换转义代码,使用:
    • Matcher.find()
    • Matcher.appendReplacement(),以及
    • appendTail()方法

试试看。我对像您这样的大文件的性能没有任何见解。但是,代码非常简单,您可以对其进行调整以获得所需的性能。

谢谢您的回答。基本上,使用正则表达式的想法是好的,但是在大文件上使用它时,实现似乎太慢了。我现在用一个数据库解决了我的问题,该数据库与应用一起部署,减少了我收到的XML流的大小。但如果有人能给我指出另一个解决方案(更快的库或其他东西),我仍然会很感激:)谢谢你的回答。基本上,使用正则表达式的想法是好的,但是在大文件上使用它时,实现似乎太慢了。我现在用一个数据库解决了我的问题,该数据库与应用一起部署,减少了我收到的XML流的大小。但如果有人能给我指出另一种解决方案(更快的库或其他东西),我仍然会很感激:)