解析Java中的缩进文本树

我有一个缩进文件,需要使用java进行解析,我需要某种方式将其放在Section类中,如下所示

    root

root1

text1

text1.1

text1.2

text2

text2.1

text2.2

root2

text1

text1.1

text1.2

text2

text2.1

text2.2.2

我有上课的地方像缩进的东西

public class Section 

{

private List<Section> children;

private String text;

private int depth;

public Section(String t)

{

text =t;

}

public List<Section> getChildren()

{

if (children == null)

{

children = new ArrayList<Section>();

}

return children;

}

public void setChildren(List<Section> newChildren)

{

if (newChildren == null) {

children = newChildren;

} else {

if (children == null) {

children = new ArrayList<Section>();

}

for (Section child : newChildren) {

this.addChild(child);

}

}

}

public void addChild(Section child)

{

if (children == null) {

children = new ArrayList<Section>();

}

if (child != null) {

children.add(child);

}

}

public String getText()

{

return text;

}

public void setText(String newText)

{

text =newText;

}

public String getDepth()

{

return depth;

}

public void setDepth(int newDepth)

{

depth = newDepth;

}

}

我需要一些方法来解析文件并将其放在预期的结果中,这是我们的Section对象,如下所示

Section=

Text="Root"

Children

Child1: Text= "root1"

Child1: "text1"

Child1="Text 1.1"

Child2="Text 1.2"

Child2: "text2"

Child1="Text 2.1"

Child2="Text 2.2"

Children

Child2: Text= "root2"

Child1: "text1"

Child1="Text 1.1"

Child2="Text 1.2"

Child2: "text2"

Child1="Text 2.1"

Child2="Text 2.2"

Here is some code that I have started

int indentCount=0;

while(String text = reader.readline()

{

indentCount=countLeadingSpaces(String word);

//TODO create the section here

}

public static int countLeadingSpaces(String word)

{

int length=word.length();

int count=0;

for(int i=0;i<length;i++)

{

char first = word.charAt(i);

if(Character.isWhitespace(first))

{

count++;

}

else

{

return count;

}

}

return count;

}

回答:

我也添加了一个父指针。也许不用它也可以解析文本,但是父指针使它更容易。首先,您需要具有更多的构造函数:

static final int root_depth = 4; // assuming 4 whitespaces precede the tree root

public Section(String text, int depth) {

this.text = text;

this.depth = depth;

this.children = new ArrayList<Section>();

this.parent = null;

}

public Section(String text, int depth, Section parent) {

this.text = text;

this.depth = depth;

this.children = new ArrayList<Section>();

this.parent = parent;

}

然后,当您开始解析文件时,请逐行读取它:

Section prev = null;

for (String line; (line = bufferedReader.readLine()) != null; ) {

if (prev == null && line begins with root_depth whitespaces) {

Section root = new Section(text_of_line, root_depth);

prev = root;

}

else {

int t_depth = no. of whitespaces at the beginning of this line;

if (t_depth > prev.getDepth())

// assuming that empty sections are not allowed

Section t_section = new Section(text_of_line, t_depth, prev);

prev.addChild(t_section);

}

else if (t_depth == prev.getDepth) {

Section t_section = new Section(text_of_line, t_depth, prev.getParent());

prev.getParent().addChild(t_section);

}

else {

while (t_depth < prev.getDepth()) {

prev = prev.getParent();

}

// at this point, (t_depth == prev.getDepth()) = true

Section t_section = new Section(text_of_line, t_depth, prev.getParent());

prev.getParent().addChild(t_section);

}

}

}

我已经掩盖了伪代码的一些细节,但我认为您已经获得了如何进行此解析的总体思路。请记住要实现addChild(),getDepth(),getParent()等方法。

以上是 解析Java中的缩进文本树 的全部内容, 来源链接: utcz.com/qa/406562.html

回到顶部