While循环java中的递归函数

时间:2015-12-14 09:49:26

标签: java loops recursion cq5

我在迭代cq5中的节点时遇到了问题。 在迭代尝试迭代所有子节点的第一级子节点之后,下面是代码。

但是,一旦迭代第一级,所有子节点都不会被迭代。

private void findNodeWithSpace(Node node) {
    try {
        NodeIterator iterator = node.getNodes();
        while (iterator.hasNext()) {
            Node childNode = (Node) iterator.nextNode();
            if (StringUtils.isNotEmpty(childNode.getName())) {
                if (childNode.getName().contains(" ")) {
                    childNode.getPath()
                    count++;
                    LOG.info("**count is**" + count);
                }
                NodeIterator iterator1 = childNode.getNodes();
                if (iterator1 != null) {
                    findNodeWithSpace(childNode);
                }
            }
        }
    } catch (RepositoryException e) {
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:0)

代码似乎是正确的。如果没有空节点名称,您是否检查childNodes是否有节点迭代它们?

其他方式,我不知道CQ5,但由于你向第一个迭代器元素强制转换Node,你可能还需要将iterator1的元素转换为Node,在递归之前。

答案 1 :(得分:0)

请参阅下面的代码:

void yourMethod()
{
    Node mainNode = .....; // You somehow get your main node from query or hardcoding the name

   //The Recursive Function starts here. variable "count" should be instance here
    countNumberNodeWithSpaces(mainNode.getNodes());


}   



private void countNumberNodeWithSpaces(NodeIterator  nodeItr)
    {

        while(nodeItr.hasNext())
        {
            Node node =nodeItr.nextNode();


            if(node.getName().contains(" "))
            {   
                count++;

            }
            countNumberNodeWithSpaces(node.getNodes());
        }
    }