Android:拆分非常大的字符串

时间:2014-11-04 09:30:34

标签: java android split string-split

我有下面的XML SAX处理程序:

private class GetXML_Handler extends DefaultHandler {
        int x = 0;
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            Log.i("DataHandler", "Start of XML element");
            int y = 0;
            if (qName.equals("polygon")) {
                locations.add(x, new ArrayList<location>());
                String coordinates = attributes.getValue("coordinates");
                String[] parts = coordinates.split(",");
                System.out.println("Cyklus zacaty");
                locations.get(x).add(y, new location(Double.parseDouble(parts[0]), Double.parseDouble(parts[1])));
                for(int i = 2; i <= parts.length; i = i + 2){
                    y++;
                    double Latitude = Double.parseDouble(parts[i].substring(2));
                    double Longitude = Double.parseDouble(parts[i+1]);
                    locations.get(x).add(y, new location(Latitude, Longitude));
                }
                System.out.println("cyklus skonceny");
                x++;
            }
        }
    }

然而,“cyklus zacaty”永远不会被打印出来。如果我在String[] parts = coordinates.split(",")之前移动它,它打印好。那些字符串很大(就像350个GPS坐标)所以java可能无法处理它并且它停止(毫无例外)。

此外,我的“XML元素开始”仅打印5次(直到第一个坐标),但是如果我删除这个拆分方法,它会打印28次(我的XML元素的数量)。我确信我的XML处理程序正常工作(它只是关于这些字符串的东西)。

XML的结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<oblasti>
    <oblast>
        <nazovOblasti>VT</nazovOblasti>
        <polygon>
            <coordinates>
               132456,4658789,0 56487,4864684
            </coordinates>
        </polygon>
      ....

有什么建议吗?

先谢谢

2 个答案:

答案 0 :(得分:1)

Attributes参数不包含节点的子元素,只包含分配给节点的属性(如果有)。因此,attributes.getValue("coordinates")没有按照您的期望行事。

答案 1 :(得分:0)

我认为你的问题不是分裂方法,而是这一行:

locations.get(x).add(y, new location(Double.parseDouble(parts[0]), Double.parseDouble(parts[1])));

,原因是因为字符串有空格,并且它们在拆分后保留,因此无法解析。

在拆分之后和其他任何事情之前尝试这个:

for (i=0; i<parts.length(); i++){
parts[i].trim();
}

当发生异常时,有时它会在最后一行完全执行之前中断线程,特别是如果它是控制台输出。它让我疯了太多次。这可能是您的打印线未显示的原因。