如何解析字符串并根据java中定义的不同模式使用它?
How to parse string and consume it according to different defined patterns in java?
我有一个案例,用户应该为一个字符串定义不同的模式,比如在配置文件中放置位置,例如:
<place-name>
<place-name>, <place-location>
<place-name>, <place-location>, <city>
<place-name>, <place-location>, <city>, <country>
<place-name>, <place-location>, <country>
注意:模式不应仅限于上述模式,应由用户动态定义为配置,并可扩展至数十种模式。
一些标签有一个可能值的列表,以便能够区分具有相同结构的模式,例如第 3 和第 5 种模式,其中用户应该为城市和国家/地区定义可能值的列表,例如
<city> = Abilene | Akron | Albuquerque | Alexandria | Allentown | Anaheim | Anchorage | Ann Arbor | Antioch | Arlington | Arvada| Aurora | Austin | Bakersfield| Baltimore | Bangor ...
<country> = USA | U.S. | United States | U.K. ...
根据这些配置,最终用户应该能够编写一个字符串,然后它应该由程序根据定义的模式之一进行解析。
例如,如果最终用户写入:
Disneyland Park, 1313 Disneyland Dr. , Anaheim, United States
该工具应该能够将其与以下模式匹配
<place-name>, <place-location>, <city>, <country>
然后是这些信息。应该在后面的程序中用于进一步处理。
如何在 java 中处理此问题?有没有直接的方法?
您所描述的是一个 "lexical parser",它通常用于将 "code" 解析为指令树..
最常用的是 YACC,但由于您使用的是 java,我不得不说 antlr 可能是您最好的选择。 (antlr 是 yacc 的 java 端口。)
我有一个案例,用户应该为一个字符串定义不同的模式,比如在配置文件中放置位置,例如:
<place-name>
<place-name>, <place-location>
<place-name>, <place-location>, <city>
<place-name>, <place-location>, <city>, <country>
<place-name>, <place-location>, <country>
注意:模式不应仅限于上述模式,应由用户动态定义为配置,并可扩展至数十种模式。
一些标签有一个可能值的列表,以便能够区分具有相同结构的模式,例如第 3 和第 5 种模式,其中用户应该为城市和国家/地区定义可能值的列表,例如
<city> = Abilene | Akron | Albuquerque | Alexandria | Allentown | Anaheim | Anchorage | Ann Arbor | Antioch | Arlington | Arvada| Aurora | Austin | Bakersfield| Baltimore | Bangor ...
<country> = USA | U.S. | United States | U.K. ...
根据这些配置,最终用户应该能够编写一个字符串,然后它应该由程序根据定义的模式之一进行解析。
例如,如果最终用户写入:
Disneyland Park, 1313 Disneyland Dr. , Anaheim, United States
该工具应该能够将其与以下模式匹配
<place-name>, <place-location>, <city>, <country>
然后是这些信息。应该在后面的程序中用于进一步处理。
如何在 java 中处理此问题?有没有直接的方法?
您所描述的是一个 "lexical parser",它通常用于将 "code" 解析为指令树..
最常用的是 YACC,但由于您使用的是 java,我不得不说 antlr 可能是您最好的选择。 (antlr 是 yacc 的 java 端口。)