递归函数中的字符串操作导致stackoverflow

时间:2014-06-26 13:41:58

标签: java stack-overflow

我正在构建遍历一百万行左右的递归函数,我在执行期间从此函数中获取了stackOverFlow。

protected String[] getConnectedCities(String line) {
    return line.trim().toLowerCase().replace(DELIMITER + " ", DELIMITER)
            .split(DELIMITER);
}

这是完整的代码:

    protected final Map<String, City> processLine(
        final Map<String, City> dataMap) {
    try {
        String line = "";
        if ((line = bReader.readLine()) == null) {
            return dataMap;
        }
        // Check if direct relation can be found
        String connectedCities[] = parseLine(line);
        line = null;
        saveConnection(dataMap, connectedCities);

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return processLine(dataMap);
}

我不确定我做错了什么,我认为它与String行有关,但我不太确定它是什么。

感谢。

1 个答案:

答案 0 :(得分:1)

你做的最后一件事,你正在调用processLine agan。这将具有与文件中的行一样多的重复级别,直到上面的return语句失效。这在技术上是尾递归,但Java可能不理解。