搜索字符串并抓住第二场比赛

时间:2013-03-15 11:11:44

标签: java string groovy

我上周开始学习Groovy并且遇到了一些代码问题。 我想做什么:

我有一个很大的名单和一个用户输入,例如“Hi Bob I am Sue”,它以字符串形式给出。 我想取这个字符串,查看名称列表,如果字符串包含问候语和两个名称,请抓住第二个名称并将其打印在如下输出中: “嗨,苏,很高兴见到你”。 上面示例中给出的名称“Bob”将始终相同,因此在我的代码中我将其放入单独的字符串中,但后续名称可以是任何名称(实际上,它也可以是不在的名称)名单但我不知道如何解决这个问题,所以这是另一回事。)

到目前为止我所得到的并不多:

String fixedname=new String('bob')
def name=["bob","sue","peter","dr spock"] 
def greeting=["hi","hello"] 
String input= new String ('Hi bob i am sue') 

if(input.contains(fixedname) || input.contains(greeting)) 

“然后查看名称列表并打印固定名称后面的名称。” 我不知道如何将引号之间的句子放入正确的代码中。有人可以帮忙或者给我一个提示吗?

非常感谢提前和亲切的问候, 凯特

2 个答案:

答案 0 :(得分:1)

您可以考虑使用正则表达式。以下是使用您的示例的概念的快速证明。

def matcher= ('Hi bob i am dr spock'.toUpperCase() =~ /HI BOB I AM (SUE|PETER|DR SPOCK|BOB)/)
assert matcher[0][1]== 'DR SPOCK'
println("Hi ${matcher[0][1]}, nice to meet you")

答案 1 :(得分:0)

你的意思是这样的吗?

String fixedname = 'Bob'
List names = [ 'Bob', 'Sue', 'Peter', 'Dr Spock' ] 
List greeting = [ 'Hi', 'Hello' ] 

String input = 'Hi Bob I am Sue'

             // if the input string contains one of the greetings
def others = greeting.find { input.contains( it ) } ?
               // Split the string and return all names apart from the first one
               input.tokenize().findAll { it in names }.drop( 1 ) :
               // Otherwise others = null
               null

assert others == [ 'Sue' ]

虽然我怀疑你要做的事情是非平凡的,你可能会更好地研究某种自然语言处理库