【问题标题】:String Manipulation Patterns字符串操作模式
【发布时间】:2011-11-10 01:23:47
【问题描述】:

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

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

“[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 循环,并且它变得无法管理,而且我怀疑效率低下,因为我需要像上面的示例一样遍历 1,000 多个基本字符串,并用播放器替换每个不同的标签等......

那么有没有我可以研究的字符串操作模式,或者有没有人有任何可能的解决方案来解决这样的问题。

【问题讨论】:

    标签: java string replace


    【解决方案1】:

    您所描述的内容看起来有点像模板引擎的用途。

    两个流行的 Java 是:

    当然还有manymany更多。

    【讨论】:

      【解决方案2】:

      首先,回答你的问题。

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

      不是真的。有一些技术,但它们几乎不能称为设计模式。浮现在脑海中的两种技术是模板扩展和模式匹配。

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

      一种更好的技术似乎是模式匹配。让我们拿你的第一个例子,把它变成一个模式:

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

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


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

      【讨论】:

      • 我将研究模式匹配,就像你的例子一样,我会让你知道它是怎么回事..
      • 是的,我使用正则表达式进行模式匹配,它会想知道我需要它做什么,谢谢。
      【解决方案3】:

      我的两分钱,正如你所说 “我只是在另一个循环中创建一个嵌套的 for 循环,它变得无法管理,”

      你的方向错了,我的朋友,你所面临的问题有整个宇宙的解决方案,简单地称为规则引擎。 有各种类型的规则引擎(业务规则引擎、Web 模板引擎等),但对于上述要求,我建议使用业务规则引擎。

      无法评论使用哪一个,因为这取决于

      1. 多线程。
      2. 开源/商业。
      3. 负载系数/处理时间等

      希望对你有帮助

      http://ratakondas.blogspot.in/2012/06/business-rules-engines-white-paper.html [阅读提供最佳建议的摘要部分。]

      https://en.wikipedia.org/wiki/Business_rules_engine#Types_of_rule_engines https://en.wikipedia.org/wiki/Comparison_of_web_template_engines

      欢迎来到规则引擎的世界:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-18
        • 2013-05-04
        • 2013-10-13
        • 1970-01-01
        • 1970-01-01
        • 2015-05-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多