java - 字符串操作模式

标签 java string replace

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

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

"[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/

相关文章:

java - Guice/CDI/JEE6 为什么instance.select(qualifiers)使用实例而不是MyQualifier.class的Annotation?

java - 获取字符串中正确的数字

java - 如何从日期字符串添加 GMT

返回姓名首字母的 C 程序 (CS50)

regex - 在Powershell -match中,$ Match是否可以重用?

mysql - 如何为所有行的所有字段中的所有表替换 MySQL 数据库中的字符串?

java - Google Guice 3 有什么新功能?

python - 在 python 中使用正则表达式替换 csv 中逗号的分号

string - excel vba选择单元格中的倒数第二个字符

c# - 如何正确替换数组中的对象 - C#