字符串操作模式

Joh*_*ell 6 java string replace

只是想知道复杂的字符串操作是否有一组设计模式?

基本上我要解决的问题是我需要能够读取字符串,如下所示:

"[name_of_kicker]看起来有一个间隙踢,但是来自[name_of_defending_team]球员的一些真正的压力.他得到了一个[length_of_kick]踢开,但它完全漂移了."

要么

"[name_of_kicker]从[name_of_passer]接收球并发射炸弹.[name_of_kicker]确实很好地接触了,它给了几个[name_of_attacking_team]追逐者足够的时间来击球."

并用"tag"可能的值替换每个值并检查字符串是否等于另一个字符串.

因此,例如,代表玩家的任何标签我都需要能够替换为代表玩家的22个字符串值中的任何一个.但是我还需要能够确保我已经在各个标签的循环中循环使用各种标签,我可以在字符串中找到它们.注意,上面2个样本中列出的标签并不是唯一可能的标签,无数其他标签可以出现在任何句子中.

我试图创建一个嵌套for循环的负载来遍历玩家的集合等,并尝试每次都替换标签,但是有很多标签的可能性我只是在另一个中创建一个嵌套for循环,它已经变得难以管理,而且我怀疑效率低下,因为我需要像上面的示例一样循环遍历超过1000个基本字符串,并为每个字符串替换不同的标记与玩家等...

那么我可以调查任何String操作模式,或者是否有任何人有任何可能的解决方案来解决这样的问题.

Ste*_*n C 1

首先,回答你的问题。

只是想知道是否有一组用于复杂字符串操作的设计模式?

并不真地。有一些技术,但它们很难称为设计模式。我想到的两种技术是模板扩展和模式匹配。

您当前正在做/打算做的是一种模板扩展形式。但是,典型的模板引擎不支持您尝试执行的组合扩展,并且正如您所期望的那样,这似乎是解决问题的低效方法。

更好的技术似乎是模式匹配。让我们以第一个示例为例,并将其转换为模式:

“(罗纳尔迪诺|马拉多纳|彼得希尔顿|杰基查尔顿)想要解围,但受到(埃弗顿|皇家马德里|阿德莱德联)球员的一些真正压力。他得到了([0-9]+米)踢开,但它完全接触到了。”

我所做的是将所有可能的替代方案插入到伪模板中,将其转换为正则表达式。我现在可以将此正则表达式编译为 a java.util.Pattern,并使用它来匹配您的其他字符串列表。


话虽如此,如果您尝试这样做来“分析”文本,我不会评价您的成功机会。我认为你走 NLP 路线会更好。