Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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_Data Structures - Fatal编程技术网

用java解析{“;项”;=“;值”;}

用java解析{“;项”;=“;值”;},java,data-structures,Java,Data Structures,它可能存在于其他地方,但我找不到它 我有一个这样保存数据的文件{“item1”=“value1”,“item2”=“value2”}等等。 我所要做的就是得到这个值,先是.split(“,”,然后是.split(“=”。然后我用删除”。替换(“\”,”) 所以它“有效”,但不是很好和有效,特别是如果我有多个{} 有更好的方法吗?或者我应该用另一种方法保存数据吗?我真的不擅长数据存储 非常感谢!我可以想出两种方法: 匹配并替换: 将键和值之间的“=”符号替换为“:”,使其成为json文件。然后使用

它可能存在于其他地方,但我找不到它

我有一个这样保存数据的文件
{“item1”=“value1”,“item2”=“value2”}
等等。 我所要做的就是得到这个值,先是
.split(“,”
,然后是
.split(“=”
。然后我用
删除
。替换(“\”,”)

所以它“有效”,但不是很好和有效,特别是如果我有多个
{}

有更好的方法吗?或者我应该用另一种方法保存数据吗?我真的不擅长数据存储


非常感谢!我可以想出两种方法:

  • 匹配并替换:

    将键和值之间的“=”符号替换为“:”,使其成为json文件。然后使用第三方工具(如)对其进行解析。我建议使用正则表达式查找键和值之间的“=”,因为该符号也可能出现在值和/或键的字符串文字中

  • 检查括号的完整性:

    您可以使用堆栈来完成此操作。有关实现的详细信息,请参阅


  • 您知道您所能做的只是一行代码:

    String array[] = line.replaceAll("[\\{\\}\"]", "").split(",");
    
    如果我没记错的话,您在
    之前说过您
    .split(“,”
    。replace(“\”,”)

    如果是这种情况,则会出现问题,因为必须遍历所有拆分的元素才能进行替换。

    与此相反,首先进行所有替换,最后分割以获得成对数组
    (item=value)

    您可以使用ANTLR解析器生成器来解析文件中的此类输入。您可以使用的语法如下:

    S → {Q}
    Q → T | ɛ
    T → A | A,T
    A → I=V | {T}
    I → item       // item is the regex for whatever you expect in the item field
    V → value      // value is the regex for whatever you expect in the value field
    
    上述语法匹配以下类型的字符串(它还支持大括号嵌套):

  • {item=value}
  • {item=value,item=value}
  • {item=value,item=value,item=value,item=value}
  • {item=value,item=value,item=value,item=value,{item=value},{item=value}
  • {item=value,item=value,item=value,item=value,{item=value,{item=value}}
  • 一旦您使用ANTLR使用此语法解析文件输入,您将获得一个解析树,该解析树将保留原始输入中项值对的层次结构。使用此解析树数据结构,您可以轻松地收集有关各种项值对的信息

    使用ANTLR,您的解析树数据结构将如下所示:

                                             ,
                                           /   \
                                         /       \
                                       /           \
                                     /               \
                                   /                   \
                                 =                      ,                 ===> represents {item=value,{item=value,item=value}}                                                  
                                / \                   /   \
                               /   \                /       \
                           item   value           /           \
                                                 =             =
                                                /  \          /  \
                                               /    \        /    \
                                             item  value   item   value
    
    即使您不想使用ANTLR之类的工具来完成此任务,也可以基于此语法轻松编写递归下降解析器,尽管您必须使用这6种类型的令牌对文件输入进行令牌化(然后将其提供给解析器)=>


    最好的方法是以json格式存储您的数据,这将使您的搜索更加容易。您不必进行所有这些拆分。您可以使用Jackson解析您的数据,并获取值和所有对我来说很像的属性,除了props没有
    。您可以添加一个包含多个
    {}
    的示例吗?
    Token class  matches
    LPAREN         "{"
    RPAREN         "}"
    COMMA          ","
    ITEM           item  //regex for identifying items
    VALUE          value //regex for identifying values
    EQUAL          "="