用java解析{“;项”;=“;值”;}
它可能存在于其他地方,但我找不到它 我有一个这样保存数据的文件用java解析{“;项”;=“;值”;},java,data-structures,Java,Data Structures,它可能存在于其他地方,但我找不到它 我有一个这样保存数据的文件{“item1”=“value1”,“item2”=“value2”}等等。 我所要做的就是得到这个值,先是.split(“,”,然后是.split(“=”。然后我用删除”。替换(“\”,”) 所以它“有效”,但不是很好和有效,特别是如果我有多个{} 有更好的方法吗?或者我应该用另一种方法保存数据吗?我真的不擅长数据存储 非常感谢!我可以想出两种方法: 匹配并替换: 将键和值之间的“=”符号替换为“:”,使其成为json文件。然后使用
{“item1”=“value1”,“item2”=“value2”}
等等。
我所要做的就是得到这个值,先是.split(“,”
,然后是.split(“=”
。然后我用删除”
。替换(“\”,”)
所以它“有效”,但不是很好和有效,特别是如果我有多个{}
有更好的方法吗?或者我应该用另一种方法保存数据吗?我真的不擅长数据存储
非常感谢!我可以想出两种方法:
您知道您所能做的只是一行代码:
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
上述语法匹配以下类型的字符串(它还支持大括号嵌套):
,
/ \
/ \
/ \
/ \
/ \
= , ===> 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 "="