Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何编写字符串压扁器?_Java_String - Fatal编程技术网

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

我试图用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) {
  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字符),那么手工编码的解析器就足够了。