如何解析字符串并根据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 端口。)