只是想知道是否有一套用于复杂字符串操作的设计模式?
基本上我要解决的问题是我需要能够读取一个字符串,如下所示:
"[name_of_kicker] looks to make a clearance kick, but is under some real pressure from the [name_of_defending_team] players. He gets a [length_of_kick] kick away, but it drifts into touch on the full."
或
"[name_of_kicker] receives the ball from [name_of_passer] and launches the bomb. [name_of_kicker] has really made good contact, it's given a couple of [name_of_attacking_team] chasers ample time to get under the ball as it comes down."
并用可能的值替换每个 “tag”
并检查该字符串是否等于另一个字符串。
因此,例如,代表玩家的任何标签都需要能够替换为代表玩家的 22 个字符串值中的任何一个。但我还需要能够确保我已经遍历了各种标签的每个玩家组合,我可能会在字符串中找到这些标签。请注意,上述 2 个示例中列出的标签并不是唯一可能的标签,还有无数其他可能出现在任何句子中的标签。
我曾尝试创建大量嵌套 for 循环来遍历玩家集合等,并尝试每次都替换标签,但由于标签有多种可能性,我只是在另一个中创建一个嵌套 for 循环,它变得难以管理,而且我怀疑效率低下,因为我需要像上面的示例一样循环遍历 1,000 多个基本字符串,并用播放器等替换每个标签的差异标签...
那么有没有我可以研究的字符串操作模式,或者有没有人有任何可能的解决方案来解决这样的问题。
最佳答案
首先回答你的问题。
Just wondering if there are a set of design patterns for complex string manipulation?
不是真的。有一些技术,但它们很难成为设计模式。想到的两种技术是模板扩展和模式匹配。
您目前正在做/打算做的是模板扩展的一种形式。但是,典型的模板引擎不支持您尝试执行的组合扩展,正如您所预料的那样,这似乎是解决问题的低效方法。
更好的技术似乎是模式匹配。让我们以您的第一个示例为例,并将其转换为一种模式:
"(Ronaldino|Maradonna|Peter Shilton|Jackie Charlton) looks to make a clearance kick, but is under some real pressure from the (Everton|Real Madrid|Adelaide United) players. He gets a ([0-9]+ metre) kick away, but it drifts into touch on the full."
我所做的是将所有可能的备选方案插入到伪模板中,将其变成正则表达式。我现在可以将此正则表达式编译为 java.util.Pattern
,并使用它来匹配您的其他字符串列表。
话虽如此,如果您尝试这样做是为了“分析”文本,我不会评价您成功的机会。我认为你最好走 NLP 路线。
关于java - 字符串操作模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7298788/