Всем привет! Столкнулся с задачей, но никак не могу понять как ее сделать. В общем, есть формат Tree(Описание Формата) Вкратце - это строка, в которой есть символы \n, \t, пробелы и т.д Т.е вида
"access\n\ttime =2014-10-10\n\turl =labuda.com\n\tip =8.8.8.8\nerror\n\tunknown\n\t\terror =fuck"
access
time =2014-10-10
url =labuda.com
ip =8.8.8.8
error
unknown
error =fuck
[Node(access, [Node(time, 2014-10-10), Node(url, labuda.com), Node(ip, 8.8.8.8)]), Node(error, [Node(unknown, [Node(error, fuck)])])]
class Node
{
String name;
String content;
Node [] chlrn;
int indent;
Node()
{
this.name = null;
this.content = null;
this.indent = 0;
}
Node(String values,String name, int indent)
{
this.name = name;
this.content = values;
this.indent = indent;
}
void printNode()
{
System.out.println("Name: " + name + ", Value: " + content + ", Indent: " + indent);
}
}
public class Main {
public static void main(String[] args)
{
//Example string
String str = "access\n\ttime =2014-10-10\n\turl =labuda.com\n\tip =8.8.8.8\nerror\n\tunknown\n\t\terror =fuck";
String [] strArr = str.split("\n");
Pattern p = Pattern.compile("^([ \\t]*)([^=]*)(?:=(.*))?$");
Matcher m;
List<Node> lstNode = new ArrayList<Node>();
List<Node> lstNodeAns = new ArrayList<Node>();
for(int i = 0; i < strArr.length; i++)
{
//System.out.println(i + " " + strArr[i]);
String line = strArr[i];
m = p.matcher(line);
if (!m.find())
continue;
String indent = m.group(1); // отступы
String key = m.group(2); // узел
String value = m.group(3); //значение
//System.out.println(indent + key + value);
//System.out.println(indent.length());
Node nde = new Node(value, key, indent.length());
lstNode.add(nde);
}
}
Name: access , Value: null, Indent: 0
Name: time , Value: 2014-10-10, Indent: 1
Name: url , Value: labuda.com, Indent: 1
Name: ip , Value: 8.8.8.8, Indent: 1
Name: error, Value: null, Indent: 0
Name: unknown, Value: null, Indent: 1
Name: error , Value: fuck, Indent: 2
Буду очень благодарен за помощь!