Java 如何编写字符串压扁器?
我试图用Java编写一个字符串平坦器,它将以下模式转换为指定的形式Java 如何编写字符串压扁器?,java,string,Java,String,我试图用Java编写一个字符串平坦器,它将以下模式转换为指定的形式 { x:1, y:1, z:{ a:1, b:2 } } 平坦到 { x:1, y:1, z.a:1, z.b:2 } 我计划使用堆栈在{和}之间添加内容,并在解析}后将内容弹出,尽管这会变得复杂。在Java中还有其他更简单的方法吗?使用堆栈一点也不复杂。伪代码: read beginObject; while(peekAtNext != endObject && !stack.isEmpty) { re
{ x:1, y:1, z:{ a:1, b:2 } }
平坦到
{ x:1, y:1, z.a:1, z.b:2 }
我计划使用堆栈在
{
和}
之间添加内容,并在解析}
后将内容弹出,尽管这会变得复杂。在Java中还有其他更简单的方法吗?使用堆栈一点也不复杂。伪代码:
read beginObject;
while(peekAtNext != endObject && !stack.isEmpty) {
read name;
read value;
if(value == beginObject) {
push name;
} else if (value == endObject) {
pop name;
} else {
write(fullStack + "." + name);
write(".");
write(value);
}
}
read endAbject;
没有比这更简单的方法了。如果输入是
{x:1,y:1,z:{a:1,b:{c:2}}}
堆栈解决方案听起来不错。你为什么不想使用它呢?从计算机科学的角度来看,你肯定需要某种(无限)内存来跟踪你当前嵌套在哪些标签中。堆栈是解决此问题最合适的结构。您可以使用语法生成的解析器(由解析器生成器生成)。对于这个问题,几乎所有生成的解析器都使用一个堆栈,因此方法上没有区别。如果语法像您提到的那样简单(只有数字和ASCII字符),那么手工编码的解析器就足够了。