Java 字符串操作模式

Java 字符串操作模式,java,string,replace,Java,String,Replace,只是想知道是否有一套用于复杂字符串操作的设计模式 基本上,我试图解决的问题是,我需要能够读取字符串,如下所示: “[踢球者姓名]看起来想踢一个净空球,但受到[防守队员姓名]球员的一些实际压力。他得到了一个[踢球长度]的一脚,但它在全场漂移。” 或 “[踢球者的名字]从[传球者的名字]那里接球并发射炸弹。[踢球者的名字]真的接触得很好,给了两个[进攻队的名字]追逐者足够的时间在球落下时进入球下。” 并用一个可能的值替换每个“标记”,并检查该字符串是否等于另一个字符串 例如,任何代表玩家的标记,我需

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

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

“[踢球者姓名]看起来想踢一个净空球,但受到[防守队员姓名]球员的一些实际压力。他得到了一个[踢球长度]的一脚,但它在全场漂移。”

“[踢球者的名字]从[传球者的名字]那里接球并发射炸弹。[踢球者的名字]真的接触得很好,给了两个[进攻队的名字]追逐者足够的时间在球落下时进入球下。”

并用一个可能的值替换每个
“标记”
,并检查该字符串是否等于另一个字符串

例如,任何代表玩家的标记,我需要能够替换为代表玩家的22个字符串值中的任何一个。但是我还需要确保我已经循环了各个播放器的组合,以获得不同的标签,我可以在字符串中找到这些标签。注意,上面2个示例中列出的标签不是唯一可能的标签,任何句子中都可能出现无数其他标签

我曾试图创建一个嵌套for循环负载,以遍历玩家集合等,并尝试每次替换标记,但由于存在许多标记的可能性,我只是在另一个循环中创建一个嵌套for循环,它变得难以管理,而且我怀疑效率低下,因为我需要像上面的示例一样循环1000多个基本字符串,并用播放器等替换不同的标签


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

您所描述的有点像模板引擎的用途

Java的两个流行选项是:


但是,当然还有更多。首先,回答你的问题

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

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

您目前正在做/提议做的是一种模板扩展形式。但是,典型的模板引擎不支持您正在尝试进行的组合扩展,正如您预期的那样,这似乎是解决问题的低效方法

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

“(罗纳尔迪诺|马拉多纳|彼得·希尔顿|杰基·查尔顿)希望踢一个净空球,但受到(埃弗顿|皇家马德里|阿德莱德联队)球员的一些真实压力。他得到了一个([0-9]+米)开球,但在全场比赛中逐渐接近。”

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



话虽如此,如果你试图这样做来“分析”文本,我不会给你成功的机会打分。我想你最好还是走NLP路线。

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

你看错了方向,我的朋友,你所面临的问题有很多解决方案,简单地说就是一个规则引擎。 有各种类型的规则引擎(业务规则引擎、web模板引擎等),但对于上述要求,我建议使用业务规则引擎

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

  • 多线程
  • 开源/商业
  • 负载系数/处理时间等
  • 希望能有帮助

    [阅读摘要部分,它给出了最佳建议。]


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

    我将研究模式匹配,就像你的例子一样,我会让你知道它是如何进行的……是的,我使用正则表达式进行了模式匹配,它会让我想知道我需要它做什么,谢谢。